Submit Search
Upload
Okinawa Open Days 2015 Handson - Ansible
•
26 likes
•
6,513 views
Hideki Saito
Follow
Okinawa Open Days 2015のハンズオン資料
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 61
Download now
Download to read offline
Recommended
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
Takeshi Kuramochi
Ansible handson ood2016
Ansible handson ood2016
Hideki Saito
Osdt2015 saito
Osdt2015 saito
Hideki Saito
OpenStack & Ansible で実現する自動化
OpenStack & Ansible で実現する自動化
Hideki Saito
Deep Dive into Modules
Deep Dive into Modules
Hideki Saito
Ansible handson
Ansible handson
Hideki Saito
Ansible quickstart
Ansible quickstart
Hideki Saito
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
Sho A
Recommended
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
Takeshi Kuramochi
Ansible handson ood2016
Ansible handson ood2016
Hideki Saito
Osdt2015 saito
Osdt2015 saito
Hideki Saito
OpenStack & Ansible で実現する自動化
OpenStack & Ansible で実現する自動化
Hideki Saito
Deep Dive into Modules
Deep Dive into Modules
Hideki Saito
Ansible handson
Ansible handson
Hideki Saito
Ansible quickstart
Ansible quickstart
Hideki Saito
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
Sho A
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Hidetoshi Hirokawa
Ansibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStack
Masataka Tsukamoto
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
Hideki Saito
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係
Hideki Saito
ChefとPuppetの比較
ChefとPuppetの比較
Sugawara Genki
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic Inventory
Hideki Saito
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
Kazuhiro Oinuma
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
Takeshi Kuramochi
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
Hiroshi Okano
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
Hideki Saito
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
Yasutaka Hamada
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
Kamimura Taichi
Puppetのススメ
Puppetのススメ
Gosuke Miyashita
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
Rancher command line interface
Rancher command line interface
Masahito Zembutsu
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Midori Oge
Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
Docker Swarm入門
Docker Swarm入門
Masahito Zembutsu
What is an Ansible?
What is an Ansible?
Shunsaku Kudo
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
Yoshinori Nakanishi
Ansibleを失敗しながら学ぶ その1
Ansibleを失敗しながら学ぶ その1
Kazuyuki Ichikawa
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
dcubeio
More Related Content
What's hot
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Hidetoshi Hirokawa
Ansibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStack
Masataka Tsukamoto
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
Hideki Saito
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係
Hideki Saito
ChefとPuppetの比較
ChefとPuppetの比較
Sugawara Genki
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic Inventory
Hideki Saito
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
Kazuhiro Oinuma
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
Takeshi Kuramochi
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
Hiroshi Okano
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
Hideki Saito
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
Yasutaka Hamada
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
Kamimura Taichi
Puppetのススメ
Puppetのススメ
Gosuke Miyashita
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
Rancher command line interface
Rancher command line interface
Masahito Zembutsu
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Midori Oge
Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
Docker Swarm入門
Docker Swarm入門
Masahito Zembutsu
What is an Ansible?
What is an Ansible?
Shunsaku Kudo
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
Yoshinori Nakanishi
What's hot
(20)
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansibleで味わうHelion OpenStack
Ansibleで味わうHelion OpenStack
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係
ChefとPuppetの比較
ChefとPuppetの比較
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic Inventory
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
Puppetのススメ
Puppetのススメ
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
Rancher command line interface
Rancher command line interface
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Ansible2.0と実用例
Ansible2.0と実用例
Docker Swarm入門
Docker Swarm入門
What is an Ansible?
What is an Ansible?
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
Similar to Okinawa Open Days 2015 Handson - Ansible
Ansibleを失敗しながら学ぶ その1
Ansibleを失敗しながら学ぶ その1
Kazuyuki Ichikawa
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
dcubeio
今日から使い始めるChef
今日から使い始めるChef
Masahiro NAKAYAMA
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
靖 小田島
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
Taro Hirose
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
yukihiro kawada
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
VirtualTech Japan Inc.
知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点
d-shen
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Akira Yoshiyama
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
Personal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
max747
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
kumachang_LL
OpenNebula on Ubuntu
OpenNebula on Ubuntu
autumnalsky
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
Lxc on cloud
Lxc on cloud
Yukihiko SAWANOBORI
Version管理 1
Version管理 1
hakoika-itwg
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
atk1234
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみた
Takashi Umeno
Similar to Okinawa Open Days 2015 Handson - Ansible
(20)
Ansibleを失敗しながら学ぶ その1
Ansibleを失敗しながら学ぶ その1
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
今日から使い始めるChef
今日から使い始めるChef
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
知らないと地味にハマるOpen stackインストール時の注意点
知らないと地味にハマるOpen stackインストール時の注意点
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Personal Cloud Automation
Personal Cloud Automation
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
OpenNebula on Ubuntu
OpenNebula on Ubuntu
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Lxc on cloud
Lxc on cloud
Version管理 1
Version管理 1
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみた
More from Hideki Saito
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
Hideki Saito
Ansible automationplatform product updates 2021
Ansible automationplatform product updates 2021
Hideki Saito
Ansible Fest 2020 技術トピックまとめ
Ansible Fest 2020 技術トピックまとめ
Hideki Saito
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
Hideki Saito
Ansible troubleshooting 101_202007
Ansible troubleshooting 101_202007
Hideki Saito
How to contribute code to ansible awx
How to contribute code to ansible awx
Hideki Saito
Update: Ansible Tower 3.6.0
Update: Ansible Tower 3.6.0
Hideki Saito
OpenStackSDK with Ansible
OpenStackSDK with Ansible
Hideki Saito
How to contribute AWX
How to contribute AWX
Hideki Saito
Ansible Tower on OpenShift
Ansible Tower on OpenShift
Hideki Saito
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
Ansible with AWX
Ansible with AWX
Hideki Saito
Ansible101
Ansible101
Hideki Saito
OpenStack Now!
OpenStack Now!
Hideki Saito
OpenStack with SR-IOV
OpenStack with SR-IOV
Hideki Saito
OpenStack Summitの歩き方
OpenStack Summitの歩き方
Hideki Saito
OpenStack Summit 2015 Vancouver Report
OpenStack Summit 2015 Vancouver Report
Hideki Saito
OpenStack and Ansible Handson
OpenStack and Ansible Handson
Hideki Saito
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
Hideki Saito
More from Hideki Saito
(20)
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
Ansible automationplatform product updates 2021
Ansible automationplatform product updates 2021
Ansible Fest 2020 技術トピックまとめ
Ansible Fest 2020 技術トピックまとめ
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
Ansible troubleshooting 101_202007
Ansible troubleshooting 101_202007
How to contribute code to ansible awx
How to contribute code to ansible awx
Update: Ansible Tower 3.6.0
Update: Ansible Tower 3.6.0
OpenStackSDK with Ansible
OpenStackSDK with Ansible
How to contribute AWX
How to contribute AWX
Ansible Tower on OpenShift
Ansible Tower on OpenShift
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
Ansible with AWX
Ansible with AWX
Ansible101
Ansible101
OpenStack Now!
OpenStack Now!
OpenStack with SR-IOV
OpenStack with SR-IOV
OpenStack Summitの歩き方
OpenStack Summitの歩き方
OpenStack Summit 2015 Vancouver Report
OpenStack Summit 2015 Vancouver Report
OpenStack and Ansible Handson
OpenStack and Ansible Handson
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
Recently uploaded
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Recently uploaded
(9)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Okinawa Open Days 2015 Handson - Ansible
1.
OpenStack をさらに”使う”技術 Docker/Ansible 編 Ansible
を利用した自動化を体験する Hideki Saito (@saito_hideki) openstackOpen source software to build public and private clouds.
2.
who am i ● 氏名
: 齊藤 秀喜 (@saito_hideki) ● 所属 : – 株式会社インターネットイニシアティブ – 日本 OpenStack ユーザ会 ● 著書 : ● OpenStack クラウドインテグレーション ● ISBN13:978-4798139784
3.
目次 ● はじめに – Ansible の概要 ● ハンズオン前編 –
1. インストール – 2. 実際に使ってみる ● ハンズオン後編 – 3. Playbook でワークフローを実現する – 4. OpenStack と Ansible の連携
4.
はじめに
5.
このハンズオンでは、 OpenStack 上に構築したクラウド基盤 と、ワークフローを自動化するためのツールである
Ansible を組み合わせた、システムの構築・運用を自動化する手法を 紹介します。 前セッションの Docker コンテナを利用した Etherpad サイト の構築手順をもう一歩進めて自動化してみましょう。 ワークフローの自動化を体験する
6.
Ansible のようなツールを利用して、ワークフローを自動化す れば、多くのメリットが得られます。 ワークフローの自動化を体験する ✔ 何度も繰り返される作業は、人間ではなく Ansible
が実施する ✔ Ansible の Playbook( ワークフローを記述した定義ファイル ) をステージング環境 に適用して成功すれば、本番環境でもミスなく安全に作業が行える ✔ 作業内容を機械的にも人的にもレビューしやすくなる ✔ 人ではなくコンピュータが実行するので作業実施時間の見積もりも立てやすい このような定形作業は Ansible の得意分野
7.
Ansible は単発の仕事を自動化するだけでなく、複数の仕事を順序だてて まとめたワークフローの自動化を実現します。 さらに、外部インベントリを利用することで、従来の構成管理ツールが苦 手としていた、管理対象の変化にも柔軟に対応できるのが特徴です。 Ansible の概要 キーワード
概要 エージェントレス 管理対象ノードに専用エージェントを導入する必要がない ※Python2.4 以降のランタイムが事実上必須 外部インベントリ 専用の構成管理データベースを持たず、必要に応じて外部シス テムの構成管理情報を参照する方式を採用している すぐに利用可能 多数のモジュールが標準で提供されている。 シナリオ実行 多くの小さなタスクを1つにまとめることができる。 さらに、 タスクの実行結果による条件分岐や繰り返し処理などの制御構 造も記述可能 ドキュメントの充実 公式サイトのドキュメントが高品質で充実しており、ゼロから のスタートアップがしやすい
8.
Ansible の主な構成要素 Ansible は大きく以下の要素から構成されています。次章では
Ansible を 実際に利用しつつ、その仕組を解説します。 Ansible の概要 Module Playbook Plugin Inventory ファイルの転送、サービスの起動停止など Ansible に行わせる作業がモジュールとして提供さている Ansible に行わせる一連の作業の流れをまとめたもの Chef では recipe 、 Puppet では manifest にあたる Ansible が作業時に利用する callback モジュール群 動的にターゲットホストを取得してグループ化する Dynamic Inventory プログラム
9.
Ansible の概要 1. UNIX
ホストに対する操作 Ansible Host SSHSSH Target Node python>=2.4 Ansible Host WinRMWinRM Target Node PowerShell>=v3 Ansible Host Netconf over SSH Netconf over SSH Target NetworkDevice 2. Windows ホストに対する操作 3. Netconf を利用したネットワークスイッチ操作
10.
Ansible の概要 Ansible 実行可能ファイル 実行可能ファイル ping モジュール インベントリインベントリ sshdsshd 11 33 44 利用するモジュールを指定する 指定されたグループのホスト群 に関する情報を取得する モジュールから実行プログラム を生成する 実行プログラムを sftp/scp
で 転送する 転送先のホスト上で プログラムを実行する Ansible の基本的な挙動 単発の仕事を行う ansible コマンドを例に図示します。 22 実行
11.
Ansible の概要 :5 コマンドラインインターフェイス 以降のハンズオンで利用するコマンドラインは以下の通りです。 1.
モジュールを適用して単発のタスクを実行する $ ansible --version $ ansible < フィルタ文字列 > -i インベントリファイル名 -m モジュール名 $ ansible < フィルタ文字列 > -i インベントリファイル名 -m モジュール名 -a "key=value" 2. 複数のモジュールから構成された Playbook を適用する $ ansible-playbook -i インベントリファイル名 Playbook ファイル $ ansible-playbook -i インベントリファイル名 -e "key=value" Playbook ファイル 3. モジュールの利用方法を表示する $ ansible-doc モジュール名
12.
ハンズオン前編 ~ インストール ~
13.
現状のハンズオン環境 ansible を動作させるサーバ 仮想マシンインスタンス間を結ぶ 内部ネットワーク 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンスの 外部接続用ネットワーク
14.
1. インストール 1-1.Ansible が操作対象ノードへの
SSH 接続に利用するキーペアを作成する $ ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/home/centos/.ssh/id_rsa): <enter キー > Enter passphrase (empty for no passphrase): パスフレーズ <enter キー > Enter same passphrase again: パスフレーズ <enter キー > ... 1-2.EPEL リポジトリをインストールする $ sudo yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 1-3. インストール済みのパッケージ群を最新の状態に更新し再起動する $ sudo yum update -y $ sudo reboot
15.
1-4.Ansible の最新モジュールを公式リポジトリから取得する OpenStack を操作するためのモジュール群は、現在のリリースバージョン
(1.9.4) から大きく 改善されているためハンズオンでは最新版を利用する。 Ansible の最新モジュールは github 上の公式リポジトリで公開されいるため、 git パッケージ をダウンロードして最新モジュールを checkout して利用できるようあらかじめ準備しておく。 $ sudo yum install -y git $ sudo yum install -y ansible 1-5.Ansible のバージョンを確認する $ ansible --version ansible 1.9.4 configured module search path = None 1. インストール 2015.12.10 時点での最新バージョンは 1.9.4 です
16.
1. インストール 2-1. インベントリファイルを作成する Ansible
が操作対象ノードを識別するために必要となるインベントリファイル (ansible_hosts) を作成する。 $ cd ~ $ cat << EOF > ~/ansible_hosts [localhost] 127.0.0.1 ansible_connection=local EOF 2-2. Ansible モジュール利用して動作確認する Ansible は、対象ホストが操作可能であるかを確認するために ping モジュールを提供している。 これを利用してローカルホストが操作可能であることを確認する。 $ ansible localhost -i ~/ansible_hosts -m ping 127.0.0.1 | success >> { "changed": false, "ping": "pong" } localhost に対して操作が成功 (success) したことを確認する
17.
1. インストール 2-3. Ansible
から OpenStack を操作するための準備 Ansible が新たに提供する OpenStack 用モジュール (os_*) は、 OpenStack Infra で提供される shade ライブラリから OpenStack 環境を操作する仕組みになっています。 ※ 以前のモジュールは、 python-novaclient などのクライアントライブラリを直接利用していました OpenStack 環境を操作するモジュールを利用する前に、あらかじめ python の virtualenv 環境 に pip を利用して shade ライブラリを含めた依存するライブラリ群をインストールします。 $ cd ~ $ sudo yum groupinstall -y "Development Tools" $ sudo yum install -y python-devel python-virtualenv $ virtualenv ~/handson $ source ~/handson/bin/activate (handson)$ pip install shade functools32 virtualenv 環境 (handson) に切り替えると、プロンプトが (handson) に変更 され、切り替え後に pip でインストールするモジュール (*) は ~/handson 以下 にインストールされる。 ※ この中には shade が依存している python-novaclient(nova コマンド ) など も含まれる
18.
1. インストール 2-4. OpenStack
環境への接続性を確認する (handson)$ source ~/openrc (handson)$ nova list +--------------------------------------+-------------+-~-+-------------+---------------------------------------+ | ID | Name | ~ | Power State | Networks | +--------------------------------------+-------------+-~-+-------------+---------------------------------------+ | 26a6bd31-7496-4560-bc2e-bbcf8ed52bfa | step-server | ~ | Running | work-net=172.16.100.2, 192.168.253.31 | +--------------------------------------+-------------+-~-+-------------+---------------------------------------+ virtualenv 環境で nova コマンドを利用した仮想マシンインスタンスの リストが取得できたことを確認する
19.
1. インストール 3-1. 最新の
Ansible モジュールを checkout して利用する (handson)$ mkdir ~/ansible && cd ~/ansible (handson)$ git clone https://github.com/ansible/ansible.git (handson)$ git clone https://github.com/ansible/ansible-modules-core.git 3-2. 設定ファイルを作成し checkout したモジュールのパスを指定する (handson)$ cat << EOF > ~/.ansible.cfg [defaults] Library=/home/centos/ansible/ansible-modules-core/cloud host_key_checking = False EOF 3-3. ライブラリパスの設定が反映されていることを確認する (handson)$ ansible --version ansible 1.9.4 configured module search path = /home/centos/ansible/ansible-modules-core/cloud (handson)$ ansible-doc os_server os_server モジュールの使用法が表示されることを確認する ※ansible-doc から抜けるには :q[enter]
20.
ハンズオン前編 ~ 実際に使ってみる ~
21.
2. 実際に使ってみる 2-1. 操作対象のサーバ情報を取得する (handson)$
ansible localhost -i ansible_hosts -m setup 127.0.0.1 | success >> { "_ansible_verbose_override": true, "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.16.100.2" ], ...( 中略 )... } 2-2. アドホックなコマンド実行 (handson)$ ansible localhost -i ansible_hosts -a "uname -r" 127.0.0.1 | success | rc=0 >> 3.10.0-229.20.1.el7.x86_64 ansible の操作対象となっているサーバの詳細情報を取得できる この情報は他のモジュールのパラメータとして再利用することが可能 ansible が操作対象となっているサーバに SSH ログインし -a で指定されたコマンドを実行する
22.
2. 実際に使ってみる 2-3. ファイルの転送 (handson)$
ansible localhost -i ansible_hosts -m copy -a "src=~/openrc dest=/tmp/openrc.org" 127.0.0.1 | success >> { "changed": true, "checksum": "237459e27de6617a0ec770216b9066f830e2a3ea", "dest": "/tmp/openrc.org", "gid": 1000, "group": "centos", "md5sum": "91f41bca4c0c8f81a530df676fd05aa6", "mode": "0664", "owner": "centos", "secontext": "unconfined_u:object_r:user_home_t:s0", "size": 183, "src": "/home/centos/.ansible/tmp/ansible-tmp-1449820592.16-56579232754242/source", "state": "file", "uid": 1000 } (handson)$ md5sum /tmp/openrc.org 91f41bca4c0c8f81a530df676fd05aa6 /tmp/openrc.org $HOME/openrc が localhost:/tmp/openrc.org にコピーされる ※ この例では localhost->localhost のコピーしますが localhost->remote ホスト でも同様に動作します
23.
2. 実際に使ってみる 冪等性の担保 Ansible が提供するほとんどのモジュールは、同一の操作対象ノードに対して 同じ操作を行っても副作用がないことを保証しています。 2-3.
ファイルの転送 (handson)$ ansible localhost -i ansible_hosts -m copy -a "src=~/openrc dest=/tmp/openrc.org" 127.0.0.1 | success >> { "changed": true, ... } (handson)$ ansible localhost -i ansible_hosts -m copy -a "src=~/openrc dest=/tmp/openrc.org" 127.0.0.1 | success >> { "changed": false, ... } $HOME/openrc が localhost:/tmp/openrc.org にコピーされる 操作対象ホストに変化があった => changed: true コピー先に md5sum の結果が同じファイルがすでに存在しているため 二度目の操作は実施されない 操作対象ホストに変化なし => changed: false
24.
2. 実際に使ってみる 2-4. ファイルの取得 (handson)$
ansible 127.0.0.1 -i ansible_hosts -m fetch -a "src=/etc/hosts dest=/tmp" 127.0.0.1 | success >> { "changed": true, "checksum": "d83644438c9b506de63b597ae100e31588039022", "dest": "/tmp/127.0.0.1/etc/hosts", "md5sum": "fd5452809a45f2e28788086017a8e331", "remote_checksum": "d83644438c9b506de63b597ae100e31588039022", "remote_md5sum": null } (handson)$ md5sum /tmp/127.0.0.1/etc/hosts fd5452809a45f2e28788086017a8e331 /tmp/127.0.0.1/etc/hosts 操作対象ホストから /etc/hosts を取得して /tmp/127.0.0.1/etc/hosts に配置する
25.
2. 実際に使ってみる 2-5. パッケージをインストールする (handson)$
ansible localhost -i ansible_hosts -m yum -a "name=mlocate state=latest" -u centos -s 127.0.0.1 | success >> { "changed": true, ... ] } UID:centos でログインして sudo(-s) で実行する 最新 (latest) の mlocate パッケージをインストールする
26.
ハンズオン後編 OpenStack と Ansible
の連携
27.
仕事をまとめる Playbook ここまでは、 ansible
コマンドにより単発の仕事を Ansible に実行させて きましたが、現実ではこのようが仕事が複数集まって手順として実施され ることになります。 Ansible は、仮想マシンインスタンスの作成のような手順を Playbook と して定義して順序通り実行することが可能です。 以降では Playbook 機能を利用して、 Ansible にまとまった仕事をさせて みましょう。 3: Playbook でワークフローを定義する 公開鍵の登録公開鍵の登録 セキュリティグループの作成セキュリティグループの作成 仮想マシンの起動仮想マシンの起動 実行順序は常に保証される必要がある AnsiblePlaybook 11 22 33
28.
実行可能ファイル 実行可能ファイル Playbook: create_instance.yml 3: Playbook でワークフローを定義する Ansible os_keypair sshdsshd 11 22 Playbook
の仕組み 3->4 の動きを Playbook に記述された順に実行します os_security_ group os_security_ group os_security_ group_rule os_server quantum_flo ating_ip 実行可能ファイル 実行可能ファイルos_keypair 実行可能ファイル 実行可能ファイル 実行可能ファイル 実行可能ファイル 実行可能ファイルos_keypair 実行可能ファイル 実行 インベントリインベントリ 33 44 1. インベントリファイル読み込み 2. Playbook を読み込み 3. モジュールを実行ファイルに変換 4. 実行ファイルの転送と実行
29.
3. Playbook でワークフローを定義する 3-1.
ハンズオン用 Playbook を取得する (handson)$ cd ~ (handson)$ git clone https://github.com/saito-hideki/ood2015.git (handson)$ ls ood2015/playbooks create_instance.yml create_step.yml eplite_multinode.yml eplite_singlenode.yml Filename Description create_instance.yml 公開鍵の登録 -> セキュリティグループの作成 -> 仮想マシン インスタンスの作成を行う create_step.yml step-server 用インスタンスを作成する ( 今回は未使用 ) eplite_multinode.yml eplite コンテナと epmysql コンテナを別々のインスタンスで 起動する eplite_singlenode.yml eplite コンテナと epmysql を1つのインスタンスで起動する ハンズオン用 Playbook の機能
30.
3. Playbook でワークフローを定義する 3-2.
Playbook の基本構造 Playbook は Ansible に行わせるワークフローを、 YAML 形式で表現したシナリオのようなもので 以下のような基本構造をもちます。 --- - hosts: # 適用ホストを指定するフィルタ localhost vars: # パラメータ hostname: "foo" # パラメータは key=value 形式で表現 packages: # リスト構造も利用可能 - httpd - mysql tasks: # ワークフローとして実施する作業を実行順に定義 - hostname: # hostname モジュールでホスト名を設定する name: "{{ hostname }}" sudo: yes - yum: # yum モジュールでパッケージをインストールする state=latest name="{{ item }}" with_items: packages # 繰り返し処理や一定条件を満たした場合のみ実行するような制御も可能
31.
4. OpenStack と
Ansible の連携 ComputeNode VM#0 VM#1 VM#2 VM#3 VM#4 例1 例1 例2例2 Playbook によるワークフローと OpenStack 操作用モジュールを利用すると、 Ansible から OpenStack を制御することが可能です。 例1 . OpenStack API 経由でリソースの作成・削除といった管理作業を実施 例2 . 仮想マシンのリストや IP アドレス情報を OpenStack の API を利用して取得し、 この IP アドレス経由でリモート・コントロールを実施
32.
4. OpenStack と
Ansible の連携 4-1. 事前準備として以下の2点を確認してください。 (1)step-server 以外の仮想マシンが存在しないこと ➔ step-server 以外の仮想マシンは削除してください (2)step-server 用の floating-ip 以外の floating-ip が存在しないこと ➔step-server 以外の floating-ip は削除してください
33.
EtherpadLite をデプロイするワークフロー 仮想マシンインスタンスを起動して EtherpadLite
を起動する手順 を Playbook で実現してみましょう。 ここでは、 create_instance.yml と eplite_singlenode.yml の2つの Playbook で実現しています。 (1) step-server 上で作成済みの公開鍵を OpenStack 環境に登録する (2) eplite 用のセキュリティグループを作成する (3) 作成したセキュリティグループにルールを追加する (4) 仮想マシンインスタンス (eplite) を起動する (5) FloatingIP アドレスを取得する (6) 取得した FloatingIP アドレスを eplite に割り当てる (7) eplite にログインして MySQL コンテナをロードして起動する (8) eplite にログインして Etherpad コンテナをロードして起動する 4. OpenStack と Ansible の連携 (All-In-One) 仕事の流れ
34.
目標 : ハンズオン環境
(All-In-One) ansible を動作させるインスタンス 仮想マシンインスタンス間を結ぶ 内部ネットワーク 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンスの 外部接続用ネットワーク eplite と mysql を動作させるインスタンス を構築します
35.
4. OpenStack と
Ansible の連携 (All-In-One) 4-2. eplite インスタンスを起動する (create_instance.yml) (handson)$ ansible-playbook -i ansible_hosts -e "hostname=eplite" ood2015/playbooks/create_instance.yml PLAY [localhost] ************************************************************** GATHERING FACTS *************************************************************** ok: [localhost] TASK: [import keypairs] ******************************************************* changed: [localhost] => (item={...}) TASK: [create security group] ************************************************* changed: [localhost] => (item={...}) TASK: [add rules to secgroup] ************************************************* changed: [localhost] => (item=({'name': 'eplite', 'desc': 'secgroup for eplite'}, {...})) ... TASK: [create servers] ******************************************************** changed: [localhost] => (item={...}) TASK: [create and assign floating_ip to server] ******************************* changed: [localhost] => (item={...}) PLAY RECAP ******************************************************************** localhost : ok=6 changed=5 unreachable=0 failed=0 公開鍵をインポートするタスク セキュリティグループを作成するタスク セキュリティグループにルールを追加するタスク 仮想マシンインスタンスを作成するタスク FloatingIP アドレスを割り当てるタスク
36.
4. OpenStack と
Ansible の連携 (All-In-One) 4-3. eplite インスタンスが起動したことを確認する (handson)$ nova show eplite +---------------------------------+----------------------------------------------------------+ | Property | Value | +---------------------------------+----------------------------------------------------------+ ... | flavor | m1.small (2) | ... | image | Docker01 (2fcdd86d-094c-493f-93a0-7d0a22b83d6f) | | key_name | step-server | | metadata | {} | | name | eplite | ... | security_groups | eplite | | status | ACTIVE | ... | work-net network | 172.16.100.32, 192.168.253.110 | +---------------------------------+----------------------------------------------------------+ (handson)$ ssh centos@192.168.253.110 [centos@eplite ~]$ hostname eplite [centos@eplite ~]$ exit flavor は m1.small インスタンスは active 状態 Docker01 イメージで起動 公開鍵には step-server を利用 インスタンス名は "eplite" FloatingIP アドレスがアサインされている FloatingIP アドレスに対して SSH ログインすると ... インスタンス名がホスト名として設定されている
37.
4. OpenStack と
Ansible の連携 (All-In-One) 4-4. ansible_hosts に eplite のエントリを追記する (handson)$ vi ~/ansible_hosts [localhost] 127.0.0.1 ansible_connection=local [eplite] 192.168.253.112 ansible_connection=ssh ansible_ssh_user=centos 4-5. ssh-agent に公開鍵のパスフレーズを登録する (handson)$ eval `ssh-agent` (handson)$ ssh-add Enter passphrase for /home/centos/.ssh/id_rsa: 鍵のパスフレーズ Identity added: /home/centos/.ssh/id_rsa (/home/centos/.ssh/id_rsa) FloatingIP アドレスは各自の環境に応じて修正してください ssh-agent を利用して Ansible から SSH ログインする際の パスフレーズ入力を省略します
38.
4. OpenStack と
Ansible の連携 (All-In-One) 4-6. eplite アプリケーションをデプロイする (eplite_singlenode.yml) (handson)$ ansible-playbook -i ansible_hosts -e "target=192.168.253.110" ood2015/playbooks/eplite_singlenode.yml PLAY [eplite] ***************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.253.112] TASK: [install require packages] ********************************************** changed: [192.168.253.112] => (item=python-docker-py) TASK: [start epmysql] ********************************************************* changed: [192.168.253.112] TASK: [start eplite] ************************************m********************** changed: [192.168.253.112] PLAY RECAP ******************************************************************** 192.168.253.112 : ok=4 changed=3 unreachable=0 failed=0 docker モジュールが必要とする python-docker-py パッケージ をインストールするタスク epmysql コンテナをダウンロードして起動するタスク eplitel コンテナをダウンロードして起動するタスク
39.
Etherpad Lite の動作確認
(All-In-One) ブラウザから FloatingIP にアクセスしてみましょう ➔ http://192.168.253.112/
40.
EtherpadLite をデプロイするワークフロー 仮想マシンインスタンス (epapp/epmysql)
を起動して、 epmysql に MySQL コンテナを、 eapp に EtherpadLite コンテナを起動する 手順を Playbook で実現してみましょう。 create_instance.yml と eplite_multinode.yml の2つの Playbook で実現していますが、基本的な流れは All-in-One と同様です。 (1) step-server 上で作成済みの公開鍵を OpenStack 環境に登録する (2) eplite 用のセキュリティグループを作成する (3) 作成したセキュリティグループにルールを追加する (4) 仮想マシンインスタンス (epapp/epmysql) を起動する (5) FloatingIP アドレスを 2 つ取得する (6) 取得した FloatingIP アドレスを epapp/epmysql に割り当てる (7) epmysql にログインして MySQL コンテナをロードして起動する (8) epapp にログインして Etherpad コンテナをロードして起動する 4. OpenStack と Ansible の連携 (Multi Node) 仕事の流れ
41.
目標 : ハンズオン環境
(Multi Node) 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンス間を結ぶ 内部ネットワーク ansible を動作させるインスタンス mysql を起動させるインスタンス を構築します eplite を起動させるインスタンス を構築します 仮想マシンインスタンスの 外部接続用ネットワーク
42.
4. OpenStack と
Ansible の連携 (Multi Node) 4-7. eplite インスタンスを起動する (create_instance.yml) (handson)$ ansible-playbook -i ansible_hosts -e "hostname=epmysql" ood2015/playbooks/create_instance.yml PLAY [localhost] ************************************************************* ... PLAY RECAP ******************************************************************** 127.0.0.1 : ok=6 changed=2 unreachable=0 failed=0 (handson)$ ansible-playbook -i ansible_hosts -e "hostname=epapp" ood2015/playbooks/create_instance.yml PLAY [localhost] ************************************************************* ... PLAY RECAP ******************************************************************** 127.0.0.1 : ok=6 changed=2 unreachable=0 failed epmysql インスタンスを起動する epapp インスタンスを起動する
43.
4. OpenStack と
Ansible の連携 (Multi Node) 4-7. FloatingIP アドレスを確認する (handson)$ nova list +-.-+-------------+--------+-.-+-------------+-----------------------------------------+ | . | Name | Status | . | Power State | Networks | +-.-+-------------+--------+-.-+-------------+-----------------------------------------+ | . | epapp | ACTIVE | . | Running | work-net=172.16.100.37, 192.168.253.114 | | . | eplite | ACTIVE | . | Running | work-net=172.16.100.36, 192.168.253.113 | | . | epmysql | ACTIVE | . | Running | work-net=172.16.100.38, 192.168.253.115 | | . | step-server | ACTIVE | . | Running | work-net=172.16.100.28, 192.168.253.31 | +-.-+-------------+--------+-.-+-------------+-----------------------------------------+
44.
4. OpenStack と
Ansible の連携 (Multi Node) 4-8.ansible_hosts に eplite のエントリを修正する (handson)$ vi ~/ansible_hosts [localhost] 127.0.0.1 ansible_connection=local [eplite] 192.168.253.112 ansible_connection=ssh ansible_ssh_user=centos 192.168.253.114 ansible_connection=ssh ansible_ssh_user=centos 192.168.253.115 ansible_connection=ssh ansible_ssh_user=centos [eplite:vars] epapp_fip = 192.168.253.114 epmysql_fip = 192.168.253.115 FloatingIP アドレスは各自の環境に応じて修正してください FloatingIP アドレスは各自の環境に応じて修正してください
45.
4. OpenStack と
Ansible の連携 (Multi Node) 4-9. eplite インスタンスを起動する (create_instance.yml) (handson)$ ansible-playbook -i ansible_hosts ood2015/playbooks/eplite_multinode.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [127.0.0.1] ok: [192.168.253.115] ok: [192.168.253.113] ok: [192.168.253.114] TASK: [install require packages] ********************************************** ok: [192.168.253.113] => (item=python-docker-py) changed: [127.0.0.1] => (item=python-docker-py) changed: [192.168.253.115] => (item=python-docker-py) changed: [192.168.253.114] => (item=python-docker-py) TASK: [start epmysql] ********************************************************* skipping: [192.168.253.113] skipping: [192.168.253.114] skipping: [127.0.0.1] changed: [192.168.253.115] TASK: [start eplite] ********************************************************** skipping: [192.168.253.113] skipping: [192.168.253.115] skipping: [127.0.0.1] changed: [192.168.253.114] PLAY RECAP ******************************************************************** 127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0 192.168.253.113 : ok=2 changed=0 unreachable=0 failed=0 192.168.253.114 : ok=3 changed=2 unreachable=0 failed=0 192.168.253.115 : ok=3 changed=2 unreachable=0 failed=0 docker モジュールが必要とする python-docker-py パッケージ をインストールするタスク epmysql コンテナをダウンロードして起動するタスク ※epmysql インスタンスにのみ適用される eplitel コンテナをダウンロードして起動するタスク ※epapp インスタンスにのみ適用される
46.
Etherpad Lite の動作確認
(All-In-One) ブラウザから FloatingIP にアクセスしてみましょう ➔ http://192.168.253.114/
47.
付録 : Playbooks -
create_instance.yml - eplite_multinode.yml - Dynamic Inventory - 新 OpenStack モジュール - 実行ファイルを残す
48.
4. OpenStack と
Ansible の連携 ( 付録 1) 付録 1-1. create_instance.yml(1) --- - hosts: localhost vars: ansible_python_interpreter: /home/centos/handson/bin/python os_auth_url: "{{ lookup('env','OS_AUTH_URL') }}" os_username: "{{ lookup('env','OS_USERNAME') }}" os_password: "{{ lookup('env','OS_PASSWORD') }}" os_project_name: "{{ lookup('env','OS_TENANT_NAME') }}" os_region_name: "{{ lookup('env','OS_REGION_NAME') }}" keypairs: - name: "step-server" public_key_file: "/home/centos/.ssh/id_rsa.pub" secgroups: - name: "eplite" desc: "secgroup for eplite" rules: - ... servers: - name: "{{ hostname }}" key_name: "step-server" ... OpenStack API 接続情報を定義 公開鍵情報を keypairs として定義 セキュリティグループとルールを定義 適用対象はローカルホストグループ 仮想マシンインスタンスのスペックを定義
49.
4. OpenStack と
Ansible の連携 ( 付録 1) 付録 1-2. create_instance.yml(2) tasks: - name: import keypairs os_keypair: state=present name="{{ item.name }}" public_key_file="{{ item.public_key_file }}" with_items: keypairs - name: create security group os_security_group: state=present name="{{ item.name }}" description="{{ item.desc}}" with_items: secgroups ... vars: keypairs: - name: "step-server" public_key_file: "/home/centos/.ssh/id_rsa.pub" vars: secgroups: - name: "eplite" desc: "secgroup for eplite" rules: [{ ルール 1, ルール 2, ルール 3, ...}] OpenStack 環境で os_keypair モジュールが 適用された状態に状態変更する OpenStack 環境で os_security_group モジュールが 適用された状態に状態変更する
50.
4. OpenStack と
Ansible の連携 ( 付録 1) 付録 1-3. create_instance.yml(3) tasks: ... - name: add rules to secgroup os_security_group_rule: state=present security_group="{{ item[0].name }}" protocol="{{ item[1].protocol }}" port_range_min="{{ item[1].port_range_min }}" port_range_max="{{ item[1].port_range_max }}" remote_ip_prefix="{{ item[1].remote_ip_prefix }}" with_subelements: - secgroups - rules ... secgroups リストと、その中で定義される rules リストでネストされたループを作る vars: secgroups: - name: "eplite" desc: "secgroup for eplite" rules: - protocol: "icmp" port_range_min: -1 port_range_max: -1 remote_ip_prefix: "0.0.0.0/0" OpenStack 環境で os_security_group_rule モジュールが 適用された状態に状態変更する
51.
4. OpenStack と
Ansible の連携 ( 付録 1) 付録 1-4. create_instance.yml(4) vars: servers: - name: "{{ hostname }}" key_name: "step-server" flavor: "m1.small" image: "Docker01" secgroups: - "eplite" nics: - net-name: "work-net" auto_ip: no ext_net: "ext-net_1214" int_net: "work-net" tasks: ... - name: create servers os_server: state: present timeout: 200 name: "{{ item.name }}" key_name: "{{ item.key_name }}" flavor: "{{ item.flavor }}" image: "{{ item.image }}" security_groups: "{{ item.secgroups }}" nics: "{{ item.nics }}" auto_ip: "{{ item.auto_ip }}" with_items: servers ... servers リストの要素に書かれた 設定値で os_server モジュールを 繰り返し適用する OpenStack 環境で、指定したインスタンスが 起動している状態に状態変更する
52.
4. OpenStack と
Ansible の連携 ( 付録 1) 付録 1-5. create_instance.yml(5) vars: os_auth_url: "{{ lookup('env','OS_AUTH_URL') }}" os_username: "{{ lookup('env','OS_USERNAME') }}" os_password: "{{ lookup('env','OS_PASSWORD') }}" os_project_name: "{{ lookup('env','OS_TENANT_NAME') }}" os_region_name: "{{ lookup('env','OS_REGION_NAME') }}" ... servers: - name: "{{ hostname }}" ... ext_net: "ext-net_1214" int_net: "work-net" tasks: ... - name: create and assign floating_ip to server quantum_floating_ip: state=present login_username="{{ os_username }}" login_password="{{ os_password }}" login_tenant_name="{{ os_project_name }}" network_name="{{ item.ext_net }}" instance_name="{{ item.name }}" internal_network_name="{{ item.int_net }}" with_items: servers ... servers リストの要素に書かれた設定値で quantum_floating_ip モジュールを繰り返し 適用する
53.
4. OpenStack と
Ansible の連携 ( 付録2 ) 付録 2-1. eplite_multinode.yml(1) --- - hosts: all vars: require: packages: - python-docker-py epmysql: image: "192.168.253.13:5000/student-0003/epmysql:ver1.0" ports: - "3306:3306" expose: - 3306 epapp: image: "192.168.253.13:5000/student-0003/eplite:ver1.0" ports: - "80:80" expose: - 80 env: FIP: "{{ epapp_fip }}" DB_PORT_3306_TCP_ADDR: "{{ epmysql_fip }}" インベントリファイル内のすべてのホストを適用対象とする docker モジュールに渡すイメージ情報を設定する docker モジュールに渡すイメージ情報を設定する docker コンテナが利用する環境変数を設定する
54.
4. OpenStack と
Ansible の連携 ( 付録2 ) 付録 2-1. eplite_multinode.yml(1) tasks: ... - name: start epmysql docker: state: started name: epmysql insecure_registry: True image: "{{ epmysql.image }}" ports: "{{ epmysql.ports }}" expose: "{{ epmysql.expose }}" tty: True sudo: yes when: ansible_hostname == "epmysql" - name: start eplite docker: state: started name: eplite insecure_registry: True image: "{{ epapp.image }}" ports: "{{ epapp.ports }}" expose: "{{ epapp.expose }}" env: "{{ epapp.env }}" tty: True sudo: yes when: ansible_hostname == "epapp" docker モジュールは sudo で実行する docker モジュールは sudo で実行する このタスクはホスト名が epmysql であるホストにのみ適用する このタスクはホスト名が epapp であるホストにのみ適用する epmysql コンテナが起動している状態となるよう インスタンスの状態を変更する epapp コンテナが起動している状態となるよう インスタンスの状態を変更する
55.
4. OpenStack と
Ansible の連携 ( 付録3 ) ダイナミックインベントリを利用する Ansible が管理対象ホストのインベントリ情報を取得する方法は、以下の2 通りです。 (1)静的なインベントリを利用する UNIX の hosts ファイルのように静的に定義されたテキストファイル を実行時に読み込んで利用する ➔ホストの増減に対応するためには都度ファイルメンテナンスが必要 (1)動的なインベントリ ( 外部インベントリ ) を利用する OpenStack のような他のシステムを利用して、対象ホストのリストと パラメータを取得する外部プログラムを利用する ➔ホストの増減は OpenStack が管理しているので実行時に最新情報 を取得することで、インベントリ情報の鮮度を保てる
56.
実行可能ファイル 実行可能ファイル Playbook 4. OpenStack と
Ansible の連携 ( 付録3 ) Ansible sshdsshd 11 22 Playbook の仕組み ダイナミックインベントリプログラムは、 OpenStack から最新の構成情報を 取得し、 JSON 形式のインベントリを生成します。 実行可能ファイル 実行可能ファイルos_keypair 実行可能ファイル 実行可能ファイル 実行可能ファイル 実行可能ファイル 実行可能ファイルos_keypair 実行可能ファイル 実行 33 44 1. ダイナミックインベントリ実行 2. Playbook を読み込み 3. モジュールを実行ファイルに変換 4. 実行ファイルの転送と実行 ダイナミック インベントリ ダイナミック インベントリ 実行
57.
4. OpenStack と
Ansible の連携 ( 付録3 ) 付録 3-1. Dynamic Inventory プログラムを利用する (2) (handson)$ cd ~ (handson)$ ./ood2015/inventory/openstack.py --list { ... "_meta": { "hostvars": { "734f7dbf-b198-48af-829d-5ef40f2307fd": { "ansible_ssh_host": "192.168.253.114", ... } ダイナミックインベントリプログラム (openstack.py) から OpenStack に最新の仮想マシンインスタンス情報を問い合 わせて、 Ansible が利用可能な JSON 形式で出力する
58.
4. OpenStack と
Ansible の連携 ( 付録3 ) 付録 3-1. Dynamic Inventory プログラムを利用する (3) 注意 ) 実行前に epapp インスタンスと epmysql インスタンスを削除し、それぞれの FloatingIP を 開放しておいてください (handson)$ ansible-playbook -i ansible_hosts -e "hostname=epmysql" ood2015/playbooks/create_instance.yml ... (handson)$ ansible-playbook -i ansible_hosts -e "hostname=epapp" ood2015/playbooks/create_instance.yml ... (handson)$ ansible-playbook -i ./ood2015/inventory/openstack.py ood2015/playbooks/eplite_multinode_dynamic.yml ... PLAY RECAP ******************************************************************** 69816420-9f05-4fc4-8819-c2af3b00481b : ok=3 changed=2 unreachable=0 failed=0 be2f90ed-e492-4310-af64-fbd598d945d6 : ok=3 changed=2 unreachable=0 failed=0 c4a930ed-f4a2-4ee4-a82e-73a78de4ed22 : ok=2 changed=0 unreachable=0 failed=0 ecc54c11-8e66-42b1-85c5-76e443770232 : ok=2 changed=0 unreachable=0 failed=0 epapp,epmysql の FloatingIP アドレスは変更となったが、 OpenStack から 取得した最新のインベントリ情報に基づいて Playbook を実行できる
59.
4. OpenStack と
Ansible の連携 ( 付録4 ) 新たな OpenStack 用モジュール 近々リリースが予定されている Ansible v2 では、刷新された OpenStack 連携 モジュールが提供されます ( まだでない ...) shade を利用することで、よりシンプルにモジュールやダイナミックインベン トリを作成することができるようになりました。 OpenStack 接続設定 (openrc など ) 新モジュール OpenStack クライアント shade 旧モジュール OpenStack クライアント モジュール側で各クライアントの実装差異を 吸収しなければならないなど .. 実装が大変
60.
4. OpenStack と
Ansible の連携 ( 付録5 ) Ansible が生成する実行可能ファイル Ansible が操作対象ホストに対して「仕事」をする際、モジュールから実行 可能ファイルを生成して転送し、操作対象ホスト上で実行します。 この実行可能ファイルは、通常だと作業完了後に自動削除されます。 この実行可能ファイル、見たくありませんか? その方法は ... 環境変数を設定します。 $ export ANSIBLE_KEEP_REMOTE_FILES=yes
61.
おつかれさまでした
Download now