Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OpenStack をさらに”使う”技術
Docker/Ansible 編
Ansible を利用した自動化を体験する
Hideki Saito (@saito_hideki)
openstackOpen source software to ...
who am i
●
氏名 : 齊藤 秀喜 (@saito_hideki)
●
所属 :
– 株式会社インターネットイニシアティブ
– 日本 OpenStack ユーザ会
●
著書 :
●
OpenStack クラウドインテグレーション
●
I...
目次
●
はじめに
– Ansible の概要
●
ハンズオン前編
– 1. インストール
– 2. 実際に使ってみる
●
ハンズオン後編
– 3. Playbook でワークフローを実現する
– 4. OpenStack と Ansible ...
はじめに
このハンズオンでは、 OpenStack 上に構築したクラウド基盤
と、ワークフローを自動化するためのツールである Ansible
を組み合わせた、システムの構築・運用を自動化する手法を
紹介します。
前セッションの Docker コンテナを利...
Ansible のようなツールを利用して、ワークフローを自動化す
れば、多くのメリットが得られます。
ワークフローの自動化を体験する
✔
何度も繰り返される作業は、人間ではなく Ansible が実施する
✔
Ansible の Playboo...
Ansible は単発の仕事を自動化するだけでなく、複数の仕事を順序だてて
まとめたワークフローの自動化を実現します。
さらに、外部インベントリを利用することで、従来の構成管理ツールが苦
手としていた、管理対象の変化にも柔軟に対応できるのが特徴...
Ansible の主な構成要素
Ansible は大きく以下の要素から構成されています。次章では Ansible を
実際に利用しつつ、その仕組を解説します。
Ansible の概要
Module
Playbook
Plugin
Invento...
Ansible の概要
1. UNIX ホストに対する操作
Ansible Host SSHSSH
Target Node
python>=2.4
Ansible Host WinRMWinRM
Target Node
PowerShell>=...
Ansible の概要
Ansible
実行可能ファイル
実行可能ファイル
ping
モジュール
インベントリインベントリ
sshdsshd
11
33
44
利用するモジュールを指定する
指定されたグループのホスト群
に関する情報を取得する
...
Ansible の概要 :5
コマンドラインインターフェイス
以降のハンズオンで利用するコマンドラインは以下の通りです。
1. モジュールを適用して単発のタスクを実行する
$ ansible --version
$ ansible < フィルタ...
ハンズオン前編
~ インストール ~
現状のハンズオン環境
ansible を動作させるサーバ
仮想マシンインスタンス間を結ぶ
内部ネットワーク
外部接続用ネットワークと
内部ネットワーク間を結ぶ
仮想ルータ
仮想マシンインスタンスの
外部接続用ネットワーク
1. インストール
1-1.Ansible が操作対象ノードへの SSH 接続に利用するキーペアを作成する
$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
...
1-4.Ansible の最新モジュールを公式リポジトリから取得する
OpenStack を操作するためのモジュール群は、現在のリリースバージョン (1.9.4) から大きく
改善されているためハンズオンでは最新版を利用する。
Ansible ...
1. インストール
2-1. インベントリファイルを作成する
Ansible が操作対象ノードを識別するために必要となるインベントリファイル (ansible_hosts)
を作成する。
$ cd ~
$ cat << EOF > ~/ansi...
1. インストール
2-3. Ansible から OpenStack を操作するための準備
Ansible が新たに提供する OpenStack 用モジュール (os_*) は、 OpenStack Infra で提供される
shade ライ...
1. インストール
2-4. OpenStack 環境への接続性を確認する
(handson)$ source ~/openrc
(handson)$ nova list
+-----------------------------------...
1. インストール
3-1. 最新の Ansible モジュールを checkout して利用する
(handson)$ mkdir ~/ansible && cd ~/ansible
(handson)$ git clone https://...
ハンズオン前編
~ 実際に使ってみる ~
2. 実際に使ってみる
2-1. 操作対象のサーバ情報を取得する
(handson)$ ansible localhost -i ansible_hosts -m setup
127.0.0.1 | success >> {
"_ansible...
2. 実際に使ってみる
2-3. ファイルの転送
(handson)$ ansible localhost -i ansible_hosts 
-m copy -a "src=~/openrc dest=/tmp/openrc.org"
127...
2. 実際に使ってみる
冪等性の担保
Ansible が提供するほとんどのモジュールは、同一の操作対象ノードに対して
同じ操作を行っても副作用がないことを保証しています。
2-3. ファイルの転送
(handson)$ ansible loca...
2. 実際に使ってみる
2-4. ファイルの取得
(handson)$ ansible 127.0.0.1 -i ansible_hosts 
-m fetch -a "src=/etc/hosts dest=/tmp"
127.0.0.1 |...
2. 実際に使ってみる
2-5. パッケージをインストールする
(handson)$ ansible localhost -i ansible_hosts 
-m yum -a "name=mlocate state=latest" -u ce...
ハンズオン後編
OpenStack と Ansible の連携
仕事をまとめる Playbook
ここまでは、 ansible コマンドにより単発の仕事を Ansible に実行させて
きましたが、現実ではこのようが仕事が複数集まって手順として実施され
ることになります。
Ansible は、仮想マシンイン...
実行可能ファイル
実行可能ファイル
Playbook:
create_instance.yml
3: Playbook でワークフローを定義する
Ansible
os_keypair
sshdsshd
11
22
Playbook の仕組み
3...
3. Playbook でワークフローを定義する
3-1. ハンズオン用 Playbook を取得する
(handson)$ cd ~
(handson)$ git clone https://github.com/saito-hideki/o...
3. Playbook でワークフローを定義する
3-2. Playbook の基本構造
Playbook は Ansible に行わせるワークフローを、 YAML 形式で表現したシナリオのようなもので
以下のような基本構造をもちます。
---...
4. OpenStack と Ansible の連携
ComputeNode
VM#0
VM#1
VM#2
VM#3
VM#4
例1
例1
例2例2
Playbook によるワークフローと OpenStack 操作用モジュールを利用すると、
A...
4. OpenStack と Ansible の連携
4-1. 事前準備として以下の2点を確認してください。
(1)step-server 以外の仮想マシンが存在しないこと
➔ step-server 以外の仮想マシンは削除してください
(2)...
EtherpadLite をデプロイするワークフロー
仮想マシンインスタンスを起動して EtherpadLite を起動する手順
を Playbook で実現してみましょう。
ここでは、 create_instance.yml と eplite...
目標 : ハンズオン環境 (All-In-One)
ansible を動作させるインスタンス
仮想マシンインスタンス間を結ぶ
内部ネットワーク
外部接続用ネットワークと
内部ネットワーク間を結ぶ
仮想ルータ
仮想マシンインスタンスの
外部接続用...
4. OpenStack と Ansible の連携 (All-In-One)
4-2. eplite インスタンスを起動する (create_instance.yml)
(handson)$ ansible-playbook -i ansib...
4. OpenStack と Ansible の連携 (All-In-One)
4-3. eplite インスタンスが起動したことを確認する
(handson)$ nova show eplite
+----------------------...
4. OpenStack と Ansible の連携 (All-In-One)
4-4. ansible_hosts に eplite のエントリを追記する
(handson)$ vi ~/ansible_hosts
[localhost]
1...
4. OpenStack と Ansible の連携 (All-In-One)
4-6. eplite アプリケーションをデプロイする (eplite_singlenode.yml)
(handson)$ ansible-playbook -i...
Etherpad Lite の動作確認 (All-In-One)
ブラウザから FloatingIP にアクセスしてみましょう
➔
http://192.168.253.112/
EtherpadLite をデプロイするワークフロー
仮想マシンインスタンス (epapp/epmysql) を起動して、 epmysql
に MySQL コンテナを、 eapp に EtherpadLite コンテナを起動する
手順を Pla...
目標 : ハンズオン環境 (Multi Node)
外部接続用ネットワークと
内部ネットワーク間を結ぶ
仮想ルータ
仮想マシンインスタンス間を結ぶ
内部ネットワーク
ansible を動作させるインスタンス
mysql を起動させるインスタンス...
4. OpenStack と Ansible の連携 (Multi Node)
4-7. eplite インスタンスを起動する (create_instance.yml)
(handson)$ ansible-playbook -i ansib...
4. OpenStack と Ansible の連携 (Multi Node)
4-7. FloatingIP アドレスを確認する
(handson)$ nova list
+-.-+-------------+--------+-.-+---...
4. OpenStack と Ansible の連携 (Multi Node)
4-8.ansible_hosts に eplite のエントリを修正する
(handson)$ vi ~/ansible_hosts
[localhost]
12...
4. OpenStack と Ansible の連携 (Multi Node)
4-9. eplite インスタンスを起動する (create_instance.yml)
(handson)$ ansible-playbook -i ansib...
Etherpad Lite の動作確認 (All-In-One)
ブラウザから FloatingIP にアクセスしてみましょう
➔
http://192.168.253.114/
付録 : Playbooks
- create_instance.yml
- eplite_multinode.yml
- Dynamic Inventory
- 新 OpenStack モジュール
- 実行ファイルを残す
4. OpenStack と Ansible の連携 ( 付録 1)
付録 1-1. create_instance.yml(1)
---
- hosts: localhost
vars:
ansible_python_interpreter:...
4. OpenStack と Ansible の連携 ( 付録 1)
付録 1-2. create_instance.yml(2)
tasks:
- name: import keypairs
os_keypair:
state=present...
4. OpenStack と Ansible の連携 ( 付録 1)
付録 1-3. create_instance.yml(3)
tasks:
...
- name: add rules to secgroup
os_security_gro...
4. OpenStack と Ansible の連携 ( 付録 1)
付録 1-4. create_instance.yml(4)
vars:
servers:
- name: "{{ hostname }}"
key_name: "step-...
4. OpenStack と Ansible の連携 ( 付録 1)
付録 1-5. create_instance.yml(5)
vars:
os_auth_url: "{{ lookup('env','OS_AUTH_URL') }}"
o...
4. OpenStack と Ansible の連携 ( 付録2 )
付録 2-1. eplite_multinode.yml(1)
---
- hosts: all
vars:
require:
packages:
- python-dock...
4. OpenStack と Ansible の連携 ( 付録2 )
付録 2-1. eplite_multinode.yml(1)
tasks:
...
- name: start epmysql
docker:
state: started...
4. OpenStack と Ansible の連携 ( 付録3 )
ダイナミックインベントリを利用する
Ansible が管理対象ホストのインベントリ情報を取得する方法は、以下の2
通りです。
(1)静的なインベントリを利用する
UNIX の...
実行可能ファイル
実行可能ファイル
Playbook
4. OpenStack と Ansible の連携 ( 付録3 )
Ansible
sshdsshd
11
22
Playbook の仕組み
ダイナミックインベントリプログラムは、 Ope...
4. OpenStack と Ansible の連携 ( 付録3 )
付録 3-1. Dynamic Inventory プログラムを利用する (2)
(handson)$ cd ~
(handson)$ ./ood2015/inventory...
4. OpenStack と Ansible の連携 ( 付録3 )
付録 3-1. Dynamic Inventory プログラムを利用する (3)
注意 ) 実行前に epapp インスタンスと epmysql インスタンスを削除し、それぞ...
4. OpenStack と Ansible の連携 ( 付録4 )
新たな OpenStack 用モジュール
近々リリースが予定されている Ansible v2 では、刷新された OpenStack 連携
モジュールが提供されます ( まだで...
4. OpenStack と Ansible の連携 ( 付録5 )
Ansible が生成する実行可能ファイル
Ansible が操作対象ホストに対して「仕事」をする際、モジュールから実行
可能ファイルを生成して転送し、操作対象ホスト上で実行...
おつかれさまでした
Upcoming SlideShare
Loading in …5
×

Okinawa Open Days 2015 Handson - Ansible

4,985 views

Published on

Okinawa Open Days 2015のハンズオン資料

Published in: Technology
  • Be the first to comment

Okinawa Open Days 2015 Handson - Ansible

  1. 1. OpenStack をさらに”使う”技術 Docker/Ansible 編 Ansible を利用した自動化を体験する Hideki Saito (@saito_hideki) openstackOpen source software to build public and private clouds.
  2. 2. who am i ● 氏名 : 齊藤 秀喜 (@saito_hideki) ● 所属 : – 株式会社インターネットイニシアティブ – 日本 OpenStack ユーザ会 ● 著書 : ● OpenStack クラウドインテグレーション ● ISBN13:978-4798139784
  3. 3. 目次 ● はじめに – Ansible の概要 ● ハンズオン前編 – 1. インストール – 2. 実際に使ってみる ● ハンズオン後編 – 3. Playbook でワークフローを実現する – 4. OpenStack と Ansible の連携
  4. 4. はじめに
  5. 5. このハンズオンでは、 OpenStack 上に構築したクラウド基盤 と、ワークフローを自動化するためのツールである Ansible を組み合わせた、システムの構築・運用を自動化する手法を 紹介します。 前セッションの Docker コンテナを利用した Etherpad サイト の構築手順をもう一歩進めて自動化してみましょう。 ワークフローの自動化を体験する
  6. 6. Ansible のようなツールを利用して、ワークフローを自動化す れば、多くのメリットが得られます。 ワークフローの自動化を体験する ✔ 何度も繰り返される作業は、人間ではなく Ansible が実施する ✔ Ansible の Playbook( ワークフローを記述した定義ファイル ) をステージング環境 に適用して成功すれば、本番環境でもミスなく安全に作業が行える ✔ 作業内容を機械的にも人的にもレビューしやすくなる ✔ 人ではなくコンピュータが実行するので作業実施時間の見積もりも立てやすい このような定形作業は Ansible の得意分野
  7. 7. Ansible は単発の仕事を自動化するだけでなく、複数の仕事を順序だてて まとめたワークフローの自動化を実現します。 さらに、外部インベントリを利用することで、従来の構成管理ツールが苦 手としていた、管理対象の変化にも柔軟に対応できるのが特徴です。 Ansible の概要 キーワード 概要 エージェントレス 管理対象ノードに専用エージェントを導入する必要がない ※Python2.4 以降のランタイムが事実上必須 外部インベントリ 専用の構成管理データベースを持たず、必要に応じて外部シス テムの構成管理情報を参照する方式を採用している すぐに利用可能 多数のモジュールが標準で提供されている。 シナリオ実行 多くの小さなタスクを1つにまとめることができる。 さらに、 タスクの実行結果による条件分岐や繰り返し処理などの制御構 造も記述可能 ドキュメントの充実 公式サイトのドキュメントが高品質で充実しており、ゼロから のスタートアップがしやすい
  8. 8. Ansible の主な構成要素 Ansible は大きく以下の要素から構成されています。次章では Ansible を 実際に利用しつつ、その仕組を解説します。 Ansible の概要 Module Playbook Plugin Inventory ファイルの転送、サービスの起動停止など Ansible に行わせる作業がモジュールとして提供さている Ansible に行わせる一連の作業の流れをまとめたもの Chef では recipe 、 Puppet では manifest にあたる Ansible が作業時に利用する callback モジュール群 動的にターゲットホストを取得してグループ化する Dynamic Inventory プログラム
  9. 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. 10. Ansible の概要 Ansible 実行可能ファイル 実行可能ファイル ping モジュール インベントリインベントリ sshdsshd 11 33 44 利用するモジュールを指定する 指定されたグループのホスト群 に関する情報を取得する モジュールから実行プログラム を生成する 実行プログラムを sftp/scp で 転送する 転送先のホスト上で プログラムを実行する Ansible の基本的な挙動 単発の仕事を行う ansible コマンドを例に図示します。 22 実行
  11. 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. 12. ハンズオン前編 ~ インストール ~
  13. 13. 現状のハンズオン環境 ansible を動作させるサーバ 仮想マシンインスタンス間を結ぶ 内部ネットワーク 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンスの 外部接続用ネットワーク
  14. 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. 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. 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. 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. 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. 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. 20. ハンズオン前編 ~ 実際に使ってみる ~
  21. 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. 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. 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. 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. 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. 26. ハンズオン後編 OpenStack と Ansible の連携
  27. 27. 仕事をまとめる Playbook ここまでは、 ansible コマンドにより単発の仕事を Ansible に実行させて きましたが、現実ではこのようが仕事が複数集まって手順として実施され ることになります。 Ansible は、仮想マシンインスタンスの作成のような手順を Playbook と して定義して順序通り実行することが可能です。 以降では Playbook 機能を利用して、 Ansible にまとまった仕事をさせて みましょう。 3: Playbook でワークフローを定義する 公開鍵の登録公開鍵の登録 セキュリティグループの作成セキュリティグループの作成 仮想マシンの起動仮想マシンの起動 実行順序は常に保証される必要がある AnsiblePlaybook 11 22 33
  28. 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. 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. 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. 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. 32. 4. OpenStack と Ansible の連携 4-1. 事前準備として以下の2点を確認してください。 (1)step-server 以外の仮想マシンが存在しないこと ➔ step-server 以外の仮想マシンは削除してください (2)step-server 用の floating-ip 以外の floating-ip が存在しないこと ➔step-server 以外の floating-ip は削除してください
  33. 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. 34. 目標 : ハンズオン環境 (All-In-One) ansible を動作させるインスタンス 仮想マシンインスタンス間を結ぶ 内部ネットワーク 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンスの 外部接続用ネットワーク eplite と mysql を動作させるインスタンス を構築します
  35. 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. 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. 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. 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. 39. Etherpad Lite の動作確認 (All-In-One) ブラウザから FloatingIP にアクセスしてみましょう ➔ http://192.168.253.112/
  40. 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. 41. 目標 : ハンズオン環境 (Multi Node) 外部接続用ネットワークと 内部ネットワーク間を結ぶ 仮想ルータ 仮想マシンインスタンス間を結ぶ 内部ネットワーク ansible を動作させるインスタンス mysql を起動させるインスタンス を構築します eplite を起動させるインスタンス を構築します 仮想マシンインスタンスの 外部接続用ネットワーク
  42. 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. 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. 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. 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. 46. Etherpad Lite の動作確認 (All-In-One) ブラウザから FloatingIP にアクセスしてみましょう ➔ http://192.168.253.114/
  47. 47. 付録 : Playbooks - create_instance.yml - eplite_multinode.yml - Dynamic Inventory - 新 OpenStack モジュール - 実行ファイルを残す
  48. 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. 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. 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. 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. 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. 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. 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. 55. 4. OpenStack と Ansible の連携 ( 付録3 ) ダイナミックインベントリを利用する Ansible が管理対象ホストのインベントリ情報を取得する方法は、以下の2 通りです。 (1)静的なインベントリを利用する UNIX の hosts ファイルのように静的に定義されたテキストファイル を実行時に読み込んで利用する ➔ホストの増減に対応するためには都度ファイルメンテナンスが必要 (1)動的なインベントリ ( 外部インベントリ ) を利用する OpenStack のような他のシステムを利用して、対象ホストのリストと パラメータを取得する外部プログラムを利用する ➔ホストの増減は OpenStack が管理しているので実行時に最新情報 を取得することで、インベントリ情報の鮮度を保てる
  56. 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. 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. 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. 59. 4. OpenStack と Ansible の連携 ( 付録4 ) 新たな OpenStack 用モジュール 近々リリースが予定されている Ansible v2 では、刷新された OpenStack 連携 モジュールが提供されます ( まだでない ...) shade を利用することで、よりシンプルにモジュールやダイナミックインベン トリを作成することができるようになりました。 OpenStack 接続設定 (openrc など ) 新モジュール OpenStack クライアント shade 旧モジュール OpenStack クライアント モジュール側で各クライアントの実装差異を 吸収しなければならないなど .. 実装が大変
  60. 60. 4. OpenStack と Ansible の連携 ( 付録5 ) Ansible が生成する実行可能ファイル Ansible が操作対象ホストに対して「仕事」をする際、モジュールから実行 可能ファイルを生成して転送し、操作対象ホスト上で実行します。 この実行可能ファイルは、通常だと作業完了後に自動削除されます。 この実行可能ファイル、見たくありませんか? その方法は ... 環境変数を設定します。 $ export ANSIBLE_KEEP_REMOTE_FILES=yes
  61. 61. おつかれさまでした

×