SlideShare a Scribd company logo
Ansible Hands-on
Okinawa Open Days 2016
2016.12.05
Hideki Saito (@saito_hideki)
Okinawa Open Days 2016
1
whoami
氏名: 齊藤 秀喜 (さいとう ひでき)
TwitterID: @saito_hideki
• 所属:
• 株式会社インターネットイニシアティブ
• 日本OpenStackユーザ会ボードメンバー
• Okinawa Open Days 2016実行委員
• 趣味: OpenStack, Ansible, IT Automation
Okinawa Open Days 2016
2
本セッションの目的
本セッションでは、ITオートメーションツールである"Ansible"
の仕組みと基本操作、パブリッククラウド環境での利用方法に
ついて、実際に手を動かしながら体験してみましょう。
(1) Ansibleのインストール
(2) Ansibleの仕組み
(3) パブリッククラウド環境で利用する
Okinawa Open Days 2016
3
Ansibleのインストール
〜前提条件〜
Cloud Shellでのコンソール操作が可能であること
Okinawa Open Days 2016
4
Ansibleは、手作業のコード化と自動実行を実現する
ためのITオートメーションツールです。
構築手順構築手順
Server
Ansibleとは(1)
Okinawa Open Days 2016
Apache
MySQL
PHP
Linux
Linux
Apache
MySQL
PHP
Server
Linux
Apache
MySQL
PHP
構築手順書
作業実施
Playbook
コード実行
オペレータ
5
Ansibleとは(2)
Ansibleは、ITオートメーションを実現する優秀な
ツールですが、他の選択肢も存在しています。
他の代表的なプロダクトとして、ChefやPuppetがあ
げれられます。
Okinawa Open Days 2016
6
Ansibleの特徴
ChefとPuppetはAnsibleに比べて歴史も長く、多くの利用実
績があります。また、自動化を実現するためのコンセプトも
似通っています。
これらのプロダクトに対して、Ansibleは以下のような特徴
を持っています。
◎ 運用しやすいコマンドラインベースのシンプルなアーキテクチャ
◎ エージェントレスなうえに、CMDBもなしで身軽
○ 標準提供される数多くのモジュール群をもっている
☓ 外部から制御可能なAPIをもっていない(CLIベースなので)
☓ ユーザの細かな権限管理をしにくい
☓ Ansibleの設定やログなどを中央で管理する方法は提供されない
Okinawa Open Days 2016
7
Server
Infrastructure as Codeを実現
Okinawa Open Days 2016
Linux
Apache
MySQL
PHP
Playbook
例: テスト環境の⾃動構築
fetch/push
review
check/fetch/review
fetch/push
deploy
operation
operation
exec
8
ITオートメーションツールと、他の役割のツール群を
連携させることで、更に大きな導入効果を得られます。
ハンズオンの準備
Okinawa Open Days 2016
Github上のリポジトリをチェックアウト
ハンズオン用のリポジトリをチェックアウトして利用します。
このリポジトリには、ダイナミックインベントリやPlaybookなどの以
降で利用するファイル群が保存されています。
$ cd ~
$ git clone https://github.com/saito-hideki/ood-handson-ansible
$ cd ood-handson-ansible
├── ansible.cfg
├── gce.ini
├── gce.py
├── hosts
├── playbooks
│ └── gce
│ └── create_instance.yml
├── README.md
└── secrets.py.sample
Ansibleの設定ファイル
<ood-handson-ansibleリポジトリ>
ダイナミックインベントリ設定ファイル
ダイナミックインベントリインベントリファイル
GCE用のダイナミックインベントリが
利用する認証設定ファイル
Playbook
9
Ansibleのインストール(1)
Cloud Shell上にvirtualenv環境を構築します。
• 仮想環境名: ood2016
virtualenv環境への切り替え以降に、pipでインストールし
たPythonモジュールやパッケージは、virtualenv環境であ
る$HOME/ood2016/以下に配置されます。
Okinawa Open Days 2016
$ virtualenv ~/ood2016
$ source ~/ood2016/bin/activate
(ood2016)$
virtualenvの環境名がプロンプトに表示されます
virtualenv環境への切り替え
virtualenv環境(ood2016)の作成
10
Ansibleのインストール(2)
AnsibleからGoogle Cloud Platformを操作するのに必要と
なる Apache Libcloud を、pipでインストールします。
Okinawa Open Days 2016
(ood2016)$ pip install apache-libcloud
Collecting apache-libcloud
Downloading apache_libcloud-1.4.0-py2.py3-none-any.whl (2.3MB)
100% |████████████████████████████████| 2.4MB 559kB/s
Installing collected packages: apache-libcloud
Successfully installed apache-libcloud-1.4.0
Ansible
GCPモジュール
Apache Libcloud
ServerServerServer
11
Ansibleのインストール(3)
pipを利用してAnsibleをインストールして、設定ファイルを
確認します。
Okinawa Open Days 2016
(ood2016)$ pip install ansible
Installing setuptools, pip, wheel...done.
[defaults]
callback_whitelist = profile_tasks
forks = 10
gathering = smart
host_key_checking = False
private_key_file=/home/<UserID>/.ssh/google_compute_engine
transport = smart
設定ファイルパス: ~/ood-handson-ansible/ansible.cfg
設定可能なパラメータ > http://docs.ansible.com/ansible/intro_configuration.html
12
Ansibleのインストール(4)
Ansible(ver2.2.0.0)が正常に動作することを確認します。
Okinawa Open Days 2016
(ood2016)$ cd ~/ood-handson-ansible
(ood2016)$ ansible --version
ansible 2.2.0.0
config file = /home/<UserID>/ood-handson-ansible/ansible.cfg
configured module search path = Default w/o overrides
(ood2016)$ ansible localhost -i hosts -m ping
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
pingモジュールを利用して動作確認を行います。
SUCCESSとなっていれば、Ansibleは正常に動作しています
チェックアウトしたリポジトリ上にある
インベントリファイル(hosts)を利用します
13
ansibleコマンドの書式
Okinawa Open Days 2016
ansibleコマンドは、パッケージをインストールしたり、対象
ホストを再起動するなど、連続しない単発のタスクを実行す
るときに利用します。
[書式] ansible <host-pattern> [options]
[例1] モジュールを実行する
ansible <パターン> -i インベントリ -m モジュール
ansible localhost -i hosts -m ping
[例1] モジュールに変数を渡して実行する
ansible <パターン> -i インベントリ -m モジュール -e "key=value"
ansible localhost -i hosts -m debug -e "msg='Hello,World!'"
[例2] アドホックにOSのコマンドを実行する
ansible <パターン> -i インベントリ -a "コマンド"
ansible testserver -i ./gce.py -a "uname -a"
14
ansible-playbookコマンドの書式
Okinawa Open Days 2016
ansible-playbookコマンドは、ワークフローをYAML形式で
記述したPlaybookを使用して、連続するタスクを実行すると
きに利用します。
[書式] ansible-playbook -i インベントリ playbook.yml
[例1] Playbookを実行する
ansible-playbook -i インベントリ
ansible-playbook -i hosts playbook.yml
[例2] Playbookを実行時に-eオプションで変数を与える
ansible-playbook -i インベントリ -e "変数=値" Playbook
ansible-playbook -i ./gce.py -e "hostname=testserver" playbook.yml
[例3] Playbookを実行時に-tオプションでタグを指定する
ansible-playbook -i インベントリ -t Playbook
ansible-playbook -i ./gce.py -t start playbook.yml
15
Ansibleの仕組み
Okinawa Open Days 2016
16
Ansibleの構成要素
Ansibleはコマンドラインベースのツールで、以下の要素か
ら構成されています。
Okinawa Open Days 2016
# 構成要素 概要
1 Configuration Ansibleの振る舞いを決める設定ファイル
2 Inventory 管理対象ホストの一覧が記述されたファイル
3 Module タスクとしてAnsibleが実行するプログラム
4 Command タスクやPlaybookを実行するためのコマンド群
5 Playbook 複数のタスクから構成されるワークフロー定義ファイル
17
Ansibleによる自動化の仕組み
Okinawa Open Days 2016
(a) UNIXホストに対する操作
(b)Windowsホストに対する操作
(c)ネットワーク機器に対する操作
18
ansibleによるタスク実行
Okinawa Open Days 2016
19
ansible-playbookによるシナリオ実行
Okinawa Open Days 2016
AnsibleはPlaybookにより、オペレーションのコー
ド化を実現しています。
Playbookは、実施する一連のタスクを、順序立て
てYAML形式で記述したものです。
20
パブリッククラウド環境で利用する
Okinawa Open Days 2016
21
インベントリファイルの課題
Ansibleでは、インベントリファイルと呼ばれるテキストファ
イルで操作対象ホストの情報を管理しています。
Okinawa Open Days 2016
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
www[00:50]
<インベントリファイル>
IPアドレスまたは名前解決可能なホスト名
複数のホストエントリのグループ化が可能
アルファベットと数字であればレンジ指定が可能
22
ダイナミックインベントリ
操作対象の増減が激しい環境では、手動でインベントリファ
イルのエントリをメンテナンスするのは現実的に難しくなり
ます。
しかし、幸いなことにGCPのようなクラウドサービスは、ユー
ザ管理下のリソースに関する情報を取得可能なAPIを提供し
ています。Ansibleは、このAPIをダイナミックインベント
リから利用することで、環境の変化に対応します。
Okinawa Open Days 2016
API
JSON形式の
インベントリ情報
ServerServerServer
23
ダイナミックインベントリを利用する
GCPを対象として、ダイナミックインベントリを利用するに
は、いくつかの準備が必要です。
Okinawa Open Days 2016
(1) ダッシュボードから"ツールとサービス"をクリックします
(2) "API Manager"をクリックします
(3) "認証情報"をクリックします
サービスアカウントの準備
Google Cloud Platformのダッシュボードから、API Managerを利用
して認証情報を作成し、ダウンロードします。
24
ダイナミックインベントリを利用する
Okinawa Open Days 2016
サービスアカウントの準備
(4) "サービスアカウントキー"を作成します
ファイル名: credential.json
として保存してください
25
ダイナミックインベントリを利用する
Okinawa Open Days 2016
サービスアカウントの準備
作成した認証ファイルを、Cloud Shellにアップロードします。
(5) Cloud Shellのメニューバーからファイルアップロードを選択して、認証
ファイルアップロードします。
26
ダイナミックインベントリを利用する
Okinawa Open Days 2016
APIを有効化する
Google Compute EngineをAPI経由で操作する機能を有効化します。
"API Manager"の"ライブラリ"から"Compute Engine API"を"有効"にします。
27
ダイナミックインベントリを利用する
Okinawa Open Days 2016
GCP認証ファイルの作成
Google Cloud PlatformのAPIを利用するために必要となる認証情報を
設定するファイル(secrets.py)を作成します。
secrets.pyの内容は以下の2行です。
GCE_PARAMS = ('<client_email>', '<credentialファイルパス>')
GCE_KEYWORD_PARAMS = {'project': '<project_id>'}
credential.jsonの"project_id"パラメータの値
credential.jsonの"client_email"パラメータの値 credential.jsonファイルのパス
28
ダイナミックインベントリを利用する
Okinawa Open Days 2016
ダイナミックインベントリの動作確認
GCP用のダイナミックインベントリは、Pythonスクリプトで提供され
ています。
(ood2016)$ ./gce.py --help
usage: gce.py [-h] [--list] [--host HOST] [--pretty]
Produce an Ansible Inventory file based on GCE
optional arguments:
-h, --help show this help message and exit
--list List instances (default: True)
--host HOST Get all information about an instance
--pretty Pretty format (default: False)
(ood2016)$ ./gce.py --pretty --list
(ood2016)$ ./gce.py --pretty --host <ホスト名>
virtualenvの環境名がプロンプトに表示されいない場合は、以下のコマンドを実行してください
$ source ~/ood2016/bin/activate
29
仮想マシンを起動する
Okinawa Open Days 2016
GCEと連携して仮想マシンを起動する
create_instance.ymlを適用し、仮想マシンを起動させてみましょう。
---
- hosts: localhost
vars:
gcp:
driver: google
hostname: "{{ hostname }}"
machine_image: https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1604-xenial-v20161115
machine_type: n1-standard-1
project: ood2016-handson
zone: asia-northeast1-a
tasks:
- command: >
docker-machine create --driver "{{ gcp.driver }}" --google-project "{{ gcp.project }}"
--google-zone "{{ gcp.zone }}" --google-machine-type "{{ gcp.machine_type }}"
--google-machine-image "{{ gcp.machine_image }}" "{{ gcp.hostname }}"
- command: gcloud compute ssh "{{ gcp.hostname }}" --zone "{{ gcp.zone }}" -- uname
- name: show getting start
debug:
msg: "Usage: ssh -i <private-key file> -l {{ ansible_user_id }} {{ gcp.hostname }}.{{ gcp.zone }}.{{ gcp.project }}"
tags:
- usage
Ansibleが実行するタスクが列挙されています
GCEの情報や、起動する仮想マシンのスペックが定義されています
タスクを実行するホストを指定しています
みなさんの環境にあわせて修正してください
30
仮想マシンを起動する
Okinawa Open Days 2016
(ood2016)$ cd ~/ood-handson-ansible/
(ood2016)$ ansible-playbook -i hosts -e "hostname=testserver" playbooks/gce/create_instance.yml
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
Friday 02 December 2016 16:33:15 +0900 (0:00:00.027) 0:00:00.027 *******
ok: [localhost]
TASK [command] *****************************************************************
Friday 02 December 2016 16:33:16 +0900 (0:00:00.927) 0:00:00.955 *******
changed: [localhost]
TASK [command] *****************************************************************
Friday 02 December 2016 16:39:07 +0900 (0:05:50.367) 0:05:51.323 *******
Enter passphrase (empty for no passphrase): 何も入力せずにEnter
Enter same passphrase again: 何も入力せずにEnter
changed: [localhost]
TASK [show getting start] ******************************************************
Friday 02 December 2016 16:39:28 +0900 (0:00:21.277) 0:06:12.600 *******
ok: [localhost] => {
"msg": "Usage: ssh -i <private-key file> -l %userid% testserver.asia-northeast1-a.ood2016-handson"
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=2 unreachable=0 failed=0
... 以下略 ...
<ansible-playbookコマンド実⾏結果>
taskセクション
を順次実⾏
-eオプションで変数を定義
31
Playbook
仮想マシンを起動する
Okinawa Open Days 2016
GCEと連携した仮想マシンの起動プロセス
ここでは、ローカルホストのCloud Shell上で、commandモジュール
からdocker-machineコマンドを実行しています。
インベントリファイル
モジュール
Cloud Shell
(4) API
(1) read
(5) create & boot
(2) read
実行可能コード
(3)generate
exec
instance
32
仮想マシンを起動する
Okinawa Open Days 2016
起動した仮想マシンにログインする
GCE上に起動した"testserver"に実際にログインしてみましょう。
(ood2016)$ ./gce.py --host testserver | jq .gce_public_ip
"NNN.NNN.NNN.NNN"
(ood2016)$ ssh -i ~/.ssh/google_compute_engine NNN.NNN.NNN.NNN
<userd>@testserver:~$ hostname
testserver
<userd>@testserver:~$ exit
logout
Connection to NNN.NNN.NNN.NNN closed.
(ood2016)$
SSHログイン成功!
ダイナミックインベントリを利用してIPアドレスを調べる
33
Dockerコンテナを起動する
Okinawa Open Days 2016
testserverがAnsibleから操作できることを確認
GCE上に起動したtestserverが、Ansibleから操作できることを確認
します。ここでは、ダイナミックインベントリを利用しています。
(ood2016)$ ansible testserver -i ./gce.py -m ping
testserver | SUCCESS => {
"changed": false,
"ping": "pong"
}
1
2
3
3
GCE上のホストリストを取得
testserverの詳細情報を取得
testserver上でpingモジュールを実行
1
2
1 2 3
34
Dockerコンテナを起動する
Okinawa Open Days 2016
Dockerハンズオンで登録したイメージを再利⽤
Dockerハンズオンで作成・登録した、Dockerコンテナ(v1.0/v1.1)の
イメージを再利用します。
モジュール
ダイナミックインベントリ
Cloud Shell
(2) API
(3) read
(1) read
実行可能コード
(4)generate
instance
(5) sftp(6) ssh / exec
実行可能コード
CMDB
35
Dockerコンテナを起動する
Okinawa Open Days 2016
(ood2016)$ ansible-playbook -i ./gce.py 
-e "hostname=testserver" -e "tag=v1.0" playbooks/gce/launch_container.yml
PLAY [testserver] **************************************************************
TASK [setup] *******************************************************************
Saturday 03 December 2016 14:01:29 +0900 (0:00:00.033) 0:00:00.033 *****
ok: [testserver]
TASK [install requirement packages by apt] *************************************
Saturday 03 December 2016 14:01:31 +0900 (0:00:01.989) 0:00:02.023 *****
changed: [testserver] => (item=[u'python-pip'])
TASK [install requirement packages by pip] *************************************
Saturday 03 December 2016 14:02:17 +0900 (0:00:46.477) 0:00:48.500 *****
changed: [testserver] => (item=docker-py)
TASK [pull container image from gcr.io by gcloud command] **********************
Saturday 03 December 2016 14:02:22 +0900 (0:00:05.024) 0:00:53.525 *****
changed: [testserver] => (item=v1.0)
changed: [testserver] => (item=v1.1)
TASK [launch container] ********************************************************
Saturday 03 December 2016 14:02:46 +0900 (0:00:23.682) 0:01:17.208 *****
changed: [testserver]
PLAY RECAP *********************************************************************
testserver : ok=5 changed=4 unreachable=0 failed=0
...以下略...
36
変数指定 Playbook変数指定
Dockerコンテナを起動する
Okinawa Open Days 2016
GCPダッシュボードからHTTPアクセスを許可
起動したコンテナに対して、インターネット経由でのHTTPアクセス
を許可します。
37
Dockerコンテナを起動する
Okinawa Open Days 2016
Webブラウザからアクセスする
WebブラウザからコンテナにHTTPアクセスしてみましょう。
38
Dockerコンテナを切り替える
Okinawa Open Days 2016
(ood2016)$ ansible-playbook -i ./gce.py 
-e "hostname=testserver" -e "tag=v1.1" playbooks/gce/switch_container.yml
PLAY [testserver] **************************************************************
TASK [setup] *******************************************************************
Saturday 03 December 2016 16:53:49 +0900 (0:00:00.046) 0:00:00.046 *****
ok: [testserver]
TASK [stop container] **********************************************************
Saturday 03 December 2016 16:53:51 +0900 (0:00:01.637) 0:00:01.683 *****
changed: [testserver]
TASK [launch container] ********************************************************
Saturday 03 December 2016 16:53:52 +0900 (0:00:01.111) 0:00:02.795 *****
changed: [testserver]
PLAY RECAP *********************************************************************
testserver : ok=3 changed=2 unreachable=0 failed=0
...以下略...
起動中のコンテナをv1.0からv1.1に切り替えます
起動中のv1.0を停止し、v1.1を起動することにより、アプリケーショ
ンを切り替えてみましょう。
39
変数指定 Playbook変数指定
Dockerコンテナを切り替える
Okinawa Open Days 2016
Webブラウザからアクセスする
WebブラウザからコンテナにHTTPアクセスしてみましょう。
40
仮想マシンを削除する
Okinawa Open Days 2016
(ood2016)$ ansible-playbook -i hosts -e "hostname=testserver" playbooks/gce/delete_instance.yml
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
Saturday 03 December 2016 17:05:40 +0900 (0:00:00.023) 0:00:00.023 *****
ok: [localhost]
TASK [delete instance from GCE] ************************************************
Saturday 03 December 2016 17:05:41 +0900 (0:00:00.484) 0:00:00.508 *****
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
...以下略...
起動中の仮想マシンを削除します
最後に、GCE上で起動しているtestserverを削除するPlaybookを実行
してみましょう。
41
Playbook変数指定
仮想マシンを削除する
Okinawa Open Days 2016
GCEと連携した仮想マシンの削除プロセス
起動時と同じプロセスで、今度はローカルホストのCloud Shell上で、
commandモジュールからdocker-machineコマンドを利用してインス
タンスを削除します。
インベントリファイル
モジュール
Cloud Shell
(4) API
(1) read
(5) delete
(2) read
実行可能コード
(3)generate
exec
instance
42
まとめ
Okinawa Open Days 2016
43
IT Automation by Ansible
Okinawa Open Days 2016
このハンズオンセッションでは、Ansibeを利用したオペレー
ションの自動化について体験していただきました。
Ansibleに代表されるITオートメーションツールは、これまで
人間が行ってきた作業を自動化するための機能を提供してく
れます
Google Cloud PlatformやOpenStackのようなクラウド基盤
との連携機能を持っており、親和性が高いのが特徴です。
44
Infrastructure as Code
ITオートメーションツールを導入して、 手作業のコード化
を推進することで、ソフトウェア開発の分野で利用されてい
るQAやテストなどの優れた手法を、ITインフラの運用管理
にも応用することができるようになります。
1.手順書のコード化
2.コードのリビジョンの管理
3.チケットシステムによる課題管理
4.コードレビュー
5.テスト
6.デプロイシステム
7.インフラの構成管理
Internet Week 2016
出展: Wikipedia
1〜7をシステマチックに連携させることで
Infrastructure as Codeを実現する
45
Ansible関連情報
• 公式サイト
• https://www.ansible.com/
• Tower公式サイト
• https://www.ansible.com/tower
• 公式ドキュメント
• http://docs.ansible.com/ansible/index.html
• ソースコードリポジトリ
• https://github.com/ansible/ansible
• https://github.com/ansible/ansible-modules-core
• https://github.com/ansible/ansible-modules-extras
Internet Week 2016
46
おつかれさまでした:-)
Okinawa Open Days 2016

More Related Content

PDF
Ansible handson
PDF
Okinawa Open Days 2015 Handson - Ansible
PDF
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
PDF
OpenStack & Ansible で実現する自動化
PDF
Ansible quickstart
PDF
Deep Dive into Modules
PDF
Osdt2015 saito
PPTX
Ansible ではじめるインフラのコード化入門
Ansible handson
Okinawa Open Days 2015 Handson - Ansible
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
OpenStack & Ansible で実現する自動化
Ansible quickstart
Deep Dive into Modules
Osdt2015 saito
Ansible ではじめるインフラのコード化入門

What's hot (20)

PDF
Ansible 2.0を使って組む kubernetesクラスタ vol.1
PDF
ChefとPuppetの比較
PDF
Ansibleで味わうHelion OpenStack
PDF
Ansible 入門 #01 (初心者向け)
PDF
OpenStack Osloを使おう - cliff編
PDF
Ansible 2.0 のサマライズとこれから
PDF
Vagrant環境のAnsibleを速くしたい
PDF
Ansible meetuptokyo 2015 Dynamic Inventory
PDF
Ansible tower 構築方法と使い方
PDF
Puppet on AWS
PDF
Ansible roleとinventoryの書き方
PDF
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
PDF
第1回 一撃サーバー構築シェルスクリプト勉強会
PPTX
Puppetのススメ
PPTX
Pythonユーザのための構成管理入門 #pyconapac
PDF
What is an Ansible?
PDF
入門Ansible
PDF
Ansibleで始めるインフラ構築自動化
PDF
Ansible troubleshooting 101_2021
PDF
Ansible入門
Ansible 2.0を使って組む kubernetesクラスタ vol.1
ChefとPuppetの比較
Ansibleで味わうHelion OpenStack
Ansible 入門 #01 (初心者向け)
OpenStack Osloを使おう - cliff編
Ansible 2.0 のサマライズとこれから
Vagrant環境のAnsibleを速くしたい
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible tower 構築方法と使い方
Puppet on AWS
Ansible roleとinventoryの書き方
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
第1回 一撃サーバー構築シェルスクリプト勉強会
Puppetのススメ
Pythonユーザのための構成管理入門 #pyconapac
What is an Ansible?
入門Ansible
Ansibleで始めるインフラ構築自動化
Ansible troubleshooting 101_2021
Ansible入門
Ad

Similar to Ansible handson ood2016 (20)

PDF
サーバ構築自動化 On aws sqaleの場合
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PPTX
今時のDev opsの取り組み事例集
PDF
Ansible ではじめるサーバ作業の自動化
PDF
Chefで始めるWindows Server構築
PDF
20190722 Building handy CI with zuul and OpenStack
PDF
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
PPTX
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
PDF
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
KEY
Itcamp長崎2012 capistrano
PDF
Openshift 20191121
PDF
Openstack SPICE console (icehouse) verification
PDF
Ansible2.0と実用例
PPTX
サーバを作ってみた (1)
PPTX
OpenStack本番環境の作り方 - Interop 2016
PDF
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
PPTX
Open modeler
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
PPTX
ネットワークエンジニアのための Puppet / Chef
PDF
デブサミ2013【15-D-4】Opsから挑むDevOps
サーバ構築自動化 On aws sqaleの場合
ゲームのインフラをAwsで実戦tips全て見せます
今時のDev opsの取り組み事例集
Ansible ではじめるサーバ作業の自動化
Chefで始めるWindows Server構築
20190722 Building handy CI with zuul and OpenStack
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup )
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
Itcamp長崎2012 capistrano
Openshift 20191121
Openstack SPICE console (icehouse) verification
Ansible2.0と実用例
サーバを作ってみた (1)
OpenStack本番環境の作り方 - Interop 2016
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Open modeler
Ansibleを使ってdockerコンテナをプロビジョニングする
ネットワークエンジニアのための Puppet / Chef
デブサミ2013【15-D-4】Opsから挑むDevOps
Ad

More from Hideki Saito (20)

PDF
これからはじめるAnsible - Ansible Night Tokyo 2024
PDF
Ansible automationplatform product updates 2021
PDF
Ansible Fest 2020 技術トピックまとめ
PDF
Getting Started - Ansible Galaxy NG
PDF
Ansible troubleshooting 101_202007
PDF
How to contribute code to ansible awx
PDF
Update: Ansible Tower 3.6.0
PDF
OpenStackSDK with Ansible
PDF
How to contribute AWX
PDF
Ansible Tower on OpenShift
PDF
IT Automation with OpenStack and Ansible/AWX
PDF
IT Automation with OpenStack and Ansible/AWX
PDF
Ansible with AWX
PDF
Ansible101
PDF
OpenStack Now!
PDF
Ansible2とOpenStackの関係
PDF
OpenStack with SR-IOV
PDF
OpenStack Summitの歩き方
PDF
OpenStack Summit 2015 Vancouver Report
PDF
OpenStack and Ansible Handson
これからはじめるAnsible - Ansible Night Tokyo 2024
Ansible automationplatform product updates 2021
Ansible Fest 2020 技術トピックまとめ
Getting Started - Ansible Galaxy NG
Ansible troubleshooting 101_202007
How to contribute code to ansible awx
Update: Ansible Tower 3.6.0
OpenStackSDK with Ansible
How to contribute AWX
Ansible Tower on OpenShift
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWX
Ansible with AWX
Ansible101
OpenStack Now!
Ansible2とOpenStackの関係
OpenStack with SR-IOV
OpenStack Summitの歩き方
OpenStack Summit 2015 Vancouver Report
OpenStack and Ansible Handson

Ansible handson ood2016

  • 1. Ansible Hands-on Okinawa Open Days 2016 2016.12.05 Hideki Saito (@saito_hideki) Okinawa Open Days 2016 1
  • 2. whoami 氏名: 齊藤 秀喜 (さいとう ひでき) TwitterID: @saito_hideki • 所属: • 株式会社インターネットイニシアティブ • 日本OpenStackユーザ会ボードメンバー • Okinawa Open Days 2016実行委員 • 趣味: OpenStack, Ansible, IT Automation Okinawa Open Days 2016 2
  • 5. Ansibleは、手作業のコード化と自動実行を実現する ためのITオートメーションツールです。 構築手順構築手順 Server Ansibleとは(1) Okinawa Open Days 2016 Apache MySQL PHP Linux Linux Apache MySQL PHP Server Linux Apache MySQL PHP 構築手順書 作業実施 Playbook コード実行 オペレータ 5
  • 7. Ansibleの特徴 ChefとPuppetはAnsibleに比べて歴史も長く、多くの利用実 績があります。また、自動化を実現するためのコンセプトも 似通っています。 これらのプロダクトに対して、Ansibleは以下のような特徴 を持っています。 ◎ 運用しやすいコマンドラインベースのシンプルなアーキテクチャ ◎ エージェントレスなうえに、CMDBもなしで身軽 ○ 標準提供される数多くのモジュール群をもっている ☓ 外部から制御可能なAPIをもっていない(CLIベースなので) ☓ ユーザの細かな権限管理をしにくい ☓ Ansibleの設定やログなどを中央で管理する方法は提供されない Okinawa Open Days 2016 7
  • 8. Server Infrastructure as Codeを実現 Okinawa Open Days 2016 Linux Apache MySQL PHP Playbook 例: テスト環境の⾃動構築 fetch/push review check/fetch/review fetch/push deploy operation operation exec 8 ITオートメーションツールと、他の役割のツール群を 連携させることで、更に大きな導入効果を得られます。
  • 9. ハンズオンの準備 Okinawa Open Days 2016 Github上のリポジトリをチェックアウト ハンズオン用のリポジトリをチェックアウトして利用します。 このリポジトリには、ダイナミックインベントリやPlaybookなどの以 降で利用するファイル群が保存されています。 $ cd ~ $ git clone https://github.com/saito-hideki/ood-handson-ansible $ cd ood-handson-ansible ├── ansible.cfg ├── gce.ini ├── gce.py ├── hosts ├── playbooks │ └── gce │ └── create_instance.yml ├── README.md └── secrets.py.sample Ansibleの設定ファイル <ood-handson-ansibleリポジトリ> ダイナミックインベントリ設定ファイル ダイナミックインベントリインベントリファイル GCE用のダイナミックインベントリが 利用する認証設定ファイル Playbook 9
  • 10. Ansibleのインストール(1) Cloud Shell上にvirtualenv環境を構築します。 • 仮想環境名: ood2016 virtualenv環境への切り替え以降に、pipでインストールし たPythonモジュールやパッケージは、virtualenv環境であ る$HOME/ood2016/以下に配置されます。 Okinawa Open Days 2016 $ virtualenv ~/ood2016 $ source ~/ood2016/bin/activate (ood2016)$ virtualenvの環境名がプロンプトに表示されます virtualenv環境への切り替え virtualenv環境(ood2016)の作成 10
  • 11. Ansibleのインストール(2) AnsibleからGoogle Cloud Platformを操作するのに必要と なる Apache Libcloud を、pipでインストールします。 Okinawa Open Days 2016 (ood2016)$ pip install apache-libcloud Collecting apache-libcloud Downloading apache_libcloud-1.4.0-py2.py3-none-any.whl (2.3MB) 100% |████████████████████████████████| 2.4MB 559kB/s Installing collected packages: apache-libcloud Successfully installed apache-libcloud-1.4.0 Ansible GCPモジュール Apache Libcloud ServerServerServer 11
  • 12. Ansibleのインストール(3) pipを利用してAnsibleをインストールして、設定ファイルを 確認します。 Okinawa Open Days 2016 (ood2016)$ pip install ansible Installing setuptools, pip, wheel...done. [defaults] callback_whitelist = profile_tasks forks = 10 gathering = smart host_key_checking = False private_key_file=/home/<UserID>/.ssh/google_compute_engine transport = smart 設定ファイルパス: ~/ood-handson-ansible/ansible.cfg 設定可能なパラメータ > http://docs.ansible.com/ansible/intro_configuration.html 12
  • 13. Ansibleのインストール(4) Ansible(ver2.2.0.0)が正常に動作することを確認します。 Okinawa Open Days 2016 (ood2016)$ cd ~/ood-handson-ansible (ood2016)$ ansible --version ansible 2.2.0.0 config file = /home/<UserID>/ood-handson-ansible/ansible.cfg configured module search path = Default w/o overrides (ood2016)$ ansible localhost -i hosts -m ping localhost | SUCCESS => { "changed": false, "ping": "pong" } pingモジュールを利用して動作確認を行います。 SUCCESSとなっていれば、Ansibleは正常に動作しています チェックアウトしたリポジトリ上にある インベントリファイル(hosts)を利用します 13
  • 14. ansibleコマンドの書式 Okinawa Open Days 2016 ansibleコマンドは、パッケージをインストールしたり、対象 ホストを再起動するなど、連続しない単発のタスクを実行す るときに利用します。 [書式] ansible <host-pattern> [options] [例1] モジュールを実行する ansible <パターン> -i インベントリ -m モジュール ansible localhost -i hosts -m ping [例1] モジュールに変数を渡して実行する ansible <パターン> -i インベントリ -m モジュール -e "key=value" ansible localhost -i hosts -m debug -e "msg='Hello,World!'" [例2] アドホックにOSのコマンドを実行する ansible <パターン> -i インベントリ -a "コマンド" ansible testserver -i ./gce.py -a "uname -a" 14
  • 15. ansible-playbookコマンドの書式 Okinawa Open Days 2016 ansible-playbookコマンドは、ワークフローをYAML形式で 記述したPlaybookを使用して、連続するタスクを実行すると きに利用します。 [書式] ansible-playbook -i インベントリ playbook.yml [例1] Playbookを実行する ansible-playbook -i インベントリ ansible-playbook -i hosts playbook.yml [例2] Playbookを実行時に-eオプションで変数を与える ansible-playbook -i インベントリ -e "変数=値" Playbook ansible-playbook -i ./gce.py -e "hostname=testserver" playbook.yml [例3] Playbookを実行時に-tオプションでタグを指定する ansible-playbook -i インベントリ -t Playbook ansible-playbook -i ./gce.py -t start playbook.yml 15
  • 17. Ansibleの構成要素 Ansibleはコマンドラインベースのツールで、以下の要素か ら構成されています。 Okinawa Open Days 2016 # 構成要素 概要 1 Configuration Ansibleの振る舞いを決める設定ファイル 2 Inventory 管理対象ホストの一覧が記述されたファイル 3 Module タスクとしてAnsibleが実行するプログラム 4 Command タスクやPlaybookを実行するためのコマンド群 5 Playbook 複数のタスクから構成されるワークフロー定義ファイル 17
  • 18. Ansibleによる自動化の仕組み Okinawa Open Days 2016 (a) UNIXホストに対する操作 (b)Windowsホストに対する操作 (c)ネットワーク機器に対する操作 18
  • 20. ansible-playbookによるシナリオ実行 Okinawa Open Days 2016 AnsibleはPlaybookにより、オペレーションのコー ド化を実現しています。 Playbookは、実施する一連のタスクを、順序立て てYAML形式で記述したものです。 20
  • 22. インベントリファイルの課題 Ansibleでは、インベントリファイルと呼ばれるテキストファ イルで操作対象ホストの情報を管理しています。 Okinawa Open Days 2016 mail.example.com [webservers] foo.example.com bar.example.com [dbservers] www[00:50] <インベントリファイル> IPアドレスまたは名前解決可能なホスト名 複数のホストエントリのグループ化が可能 アルファベットと数字であればレンジ指定が可能 22
  • 24. ダイナミックインベントリを利用する GCPを対象として、ダイナミックインベントリを利用するに は、いくつかの準備が必要です。 Okinawa Open Days 2016 (1) ダッシュボードから"ツールとサービス"をクリックします (2) "API Manager"をクリックします (3) "認証情報"をクリックします サービスアカウントの準備 Google Cloud Platformのダッシュボードから、API Managerを利用 して認証情報を作成し、ダウンロードします。 24
  • 25. ダイナミックインベントリを利用する Okinawa Open Days 2016 サービスアカウントの準備 (4) "サービスアカウントキー"を作成します ファイル名: credential.json として保存してください 25
  • 26. ダイナミックインベントリを利用する Okinawa Open Days 2016 サービスアカウントの準備 作成した認証ファイルを、Cloud Shellにアップロードします。 (5) Cloud Shellのメニューバーからファイルアップロードを選択して、認証 ファイルアップロードします。 26
  • 27. ダイナミックインベントリを利用する Okinawa Open Days 2016 APIを有効化する Google Compute EngineをAPI経由で操作する機能を有効化します。 "API Manager"の"ライブラリ"から"Compute Engine API"を"有効"にします。 27
  • 28. ダイナミックインベントリを利用する Okinawa Open Days 2016 GCP認証ファイルの作成 Google Cloud PlatformのAPIを利用するために必要となる認証情報を 設定するファイル(secrets.py)を作成します。 secrets.pyの内容は以下の2行です。 GCE_PARAMS = ('<client_email>', '<credentialファイルパス>') GCE_KEYWORD_PARAMS = {'project': '<project_id>'} credential.jsonの"project_id"パラメータの値 credential.jsonの"client_email"パラメータの値 credential.jsonファイルのパス 28
  • 29. ダイナミックインベントリを利用する Okinawa Open Days 2016 ダイナミックインベントリの動作確認 GCP用のダイナミックインベントリは、Pythonスクリプトで提供され ています。 (ood2016)$ ./gce.py --help usage: gce.py [-h] [--list] [--host HOST] [--pretty] Produce an Ansible Inventory file based on GCE optional arguments: -h, --help show this help message and exit --list List instances (default: True) --host HOST Get all information about an instance --pretty Pretty format (default: False) (ood2016)$ ./gce.py --pretty --list (ood2016)$ ./gce.py --pretty --host <ホスト名> virtualenvの環境名がプロンプトに表示されいない場合は、以下のコマンドを実行してください $ source ~/ood2016/bin/activate 29
  • 30. 仮想マシンを起動する Okinawa Open Days 2016 GCEと連携して仮想マシンを起動する create_instance.ymlを適用し、仮想マシンを起動させてみましょう。 --- - hosts: localhost vars: gcp: driver: google hostname: "{{ hostname }}" machine_image: https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1604-xenial-v20161115 machine_type: n1-standard-1 project: ood2016-handson zone: asia-northeast1-a tasks: - command: > docker-machine create --driver "{{ gcp.driver }}" --google-project "{{ gcp.project }}" --google-zone "{{ gcp.zone }}" --google-machine-type "{{ gcp.machine_type }}" --google-machine-image "{{ gcp.machine_image }}" "{{ gcp.hostname }}" - command: gcloud compute ssh "{{ gcp.hostname }}" --zone "{{ gcp.zone }}" -- uname - name: show getting start debug: msg: "Usage: ssh -i <private-key file> -l {{ ansible_user_id }} {{ gcp.hostname }}.{{ gcp.zone }}.{{ gcp.project }}" tags: - usage Ansibleが実行するタスクが列挙されています GCEの情報や、起動する仮想マシンのスペックが定義されています タスクを実行するホストを指定しています みなさんの環境にあわせて修正してください 30
  • 31. 仮想マシンを起動する Okinawa Open Days 2016 (ood2016)$ cd ~/ood-handson-ansible/ (ood2016)$ ansible-playbook -i hosts -e "hostname=testserver" playbooks/gce/create_instance.yml PLAY [localhost] *************************************************************** TASK [setup] ******************************************************************* Friday 02 December 2016 16:33:15 +0900 (0:00:00.027) 0:00:00.027 ******* ok: [localhost] TASK [command] ***************************************************************** Friday 02 December 2016 16:33:16 +0900 (0:00:00.927) 0:00:00.955 ******* changed: [localhost] TASK [command] ***************************************************************** Friday 02 December 2016 16:39:07 +0900 (0:05:50.367) 0:05:51.323 ******* Enter passphrase (empty for no passphrase): 何も入力せずにEnter Enter same passphrase again: 何も入力せずにEnter changed: [localhost] TASK [show getting start] ****************************************************** Friday 02 December 2016 16:39:28 +0900 (0:00:21.277) 0:06:12.600 ******* ok: [localhost] => { "msg": "Usage: ssh -i <private-key file> -l %userid% testserver.asia-northeast1-a.ood2016-handson" } PLAY RECAP ********************************************************************* localhost : ok=4 changed=2 unreachable=0 failed=0 ... 以下略 ... <ansible-playbookコマンド実⾏結果> taskセクション を順次実⾏ -eオプションで変数を定義 31 Playbook
  • 32. 仮想マシンを起動する Okinawa Open Days 2016 GCEと連携した仮想マシンの起動プロセス ここでは、ローカルホストのCloud Shell上で、commandモジュール からdocker-machineコマンドを実行しています。 インベントリファイル モジュール Cloud Shell (4) API (1) read (5) create & boot (2) read 実行可能コード (3)generate exec instance 32
  • 33. 仮想マシンを起動する Okinawa Open Days 2016 起動した仮想マシンにログインする GCE上に起動した"testserver"に実際にログインしてみましょう。 (ood2016)$ ./gce.py --host testserver | jq .gce_public_ip "NNN.NNN.NNN.NNN" (ood2016)$ ssh -i ~/.ssh/google_compute_engine NNN.NNN.NNN.NNN <userd>@testserver:~$ hostname testserver <userd>@testserver:~$ exit logout Connection to NNN.NNN.NNN.NNN closed. (ood2016)$ SSHログイン成功! ダイナミックインベントリを利用してIPアドレスを調べる 33
  • 34. Dockerコンテナを起動する Okinawa Open Days 2016 testserverがAnsibleから操作できることを確認 GCE上に起動したtestserverが、Ansibleから操作できることを確認 します。ここでは、ダイナミックインベントリを利用しています。 (ood2016)$ ansible testserver -i ./gce.py -m ping testserver | SUCCESS => { "changed": false, "ping": "pong" } 1 2 3 3 GCE上のホストリストを取得 testserverの詳細情報を取得 testserver上でpingモジュールを実行 1 2 1 2 3 34
  • 35. Dockerコンテナを起動する Okinawa Open Days 2016 Dockerハンズオンで登録したイメージを再利⽤ Dockerハンズオンで作成・登録した、Dockerコンテナ(v1.0/v1.1)の イメージを再利用します。 モジュール ダイナミックインベントリ Cloud Shell (2) API (3) read (1) read 実行可能コード (4)generate instance (5) sftp(6) ssh / exec 実行可能コード CMDB 35
  • 36. Dockerコンテナを起動する Okinawa Open Days 2016 (ood2016)$ ansible-playbook -i ./gce.py -e "hostname=testserver" -e "tag=v1.0" playbooks/gce/launch_container.yml PLAY [testserver] ************************************************************** TASK [setup] ******************************************************************* Saturday 03 December 2016 14:01:29 +0900 (0:00:00.033) 0:00:00.033 ***** ok: [testserver] TASK [install requirement packages by apt] ************************************* Saturday 03 December 2016 14:01:31 +0900 (0:00:01.989) 0:00:02.023 ***** changed: [testserver] => (item=[u'python-pip']) TASK [install requirement packages by pip] ************************************* Saturday 03 December 2016 14:02:17 +0900 (0:00:46.477) 0:00:48.500 ***** changed: [testserver] => (item=docker-py) TASK [pull container image from gcr.io by gcloud command] ********************** Saturday 03 December 2016 14:02:22 +0900 (0:00:05.024) 0:00:53.525 ***** changed: [testserver] => (item=v1.0) changed: [testserver] => (item=v1.1) TASK [launch container] ******************************************************** Saturday 03 December 2016 14:02:46 +0900 (0:00:23.682) 0:01:17.208 ***** changed: [testserver] PLAY RECAP ********************************************************************* testserver : ok=5 changed=4 unreachable=0 failed=0 ...以下略... 36 変数指定 Playbook変数指定
  • 37. Dockerコンテナを起動する Okinawa Open Days 2016 GCPダッシュボードからHTTPアクセスを許可 起動したコンテナに対して、インターネット経由でのHTTPアクセス を許可します。 37
  • 38. Dockerコンテナを起動する Okinawa Open Days 2016 Webブラウザからアクセスする WebブラウザからコンテナにHTTPアクセスしてみましょう。 38
  • 39. Dockerコンテナを切り替える Okinawa Open Days 2016 (ood2016)$ ansible-playbook -i ./gce.py -e "hostname=testserver" -e "tag=v1.1" playbooks/gce/switch_container.yml PLAY [testserver] ************************************************************** TASK [setup] ******************************************************************* Saturday 03 December 2016 16:53:49 +0900 (0:00:00.046) 0:00:00.046 ***** ok: [testserver] TASK [stop container] ********************************************************** Saturday 03 December 2016 16:53:51 +0900 (0:00:01.637) 0:00:01.683 ***** changed: [testserver] TASK [launch container] ******************************************************** Saturday 03 December 2016 16:53:52 +0900 (0:00:01.111) 0:00:02.795 ***** changed: [testserver] PLAY RECAP ********************************************************************* testserver : ok=3 changed=2 unreachable=0 failed=0 ...以下略... 起動中のコンテナをv1.0からv1.1に切り替えます 起動中のv1.0を停止し、v1.1を起動することにより、アプリケーショ ンを切り替えてみましょう。 39 変数指定 Playbook変数指定
  • 40. Dockerコンテナを切り替える Okinawa Open Days 2016 Webブラウザからアクセスする WebブラウザからコンテナにHTTPアクセスしてみましょう。 40
  • 41. 仮想マシンを削除する Okinawa Open Days 2016 (ood2016)$ ansible-playbook -i hosts -e "hostname=testserver" playbooks/gce/delete_instance.yml PLAY [localhost] *************************************************************** TASK [setup] ******************************************************************* Saturday 03 December 2016 17:05:40 +0900 (0:00:00.023) 0:00:00.023 ***** ok: [localhost] TASK [delete instance from GCE] ************************************************ Saturday 03 December 2016 17:05:41 +0900 (0:00:00.484) 0:00:00.508 ***** changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=2 changed=1 unreachable=0 failed=0 ...以下略... 起動中の仮想マシンを削除します 最後に、GCE上で起動しているtestserverを削除するPlaybookを実行 してみましょう。 41 Playbook変数指定
  • 42. 仮想マシンを削除する Okinawa Open Days 2016 GCEと連携した仮想マシンの削除プロセス 起動時と同じプロセスで、今度はローカルホストのCloud Shell上で、 commandモジュールからdocker-machineコマンドを利用してインス タンスを削除します。 インベントリファイル モジュール Cloud Shell (4) API (1) read (5) delete (2) read 実行可能コード (3)generate exec instance 42
  • 44. IT Automation by Ansible Okinawa Open Days 2016 このハンズオンセッションでは、Ansibeを利用したオペレー ションの自動化について体験していただきました。 Ansibleに代表されるITオートメーションツールは、これまで 人間が行ってきた作業を自動化するための機能を提供してく れます Google Cloud PlatformやOpenStackのようなクラウド基盤 との連携機能を持っており、親和性が高いのが特徴です。 44
  • 45. Infrastructure as Code ITオートメーションツールを導入して、 手作業のコード化 を推進することで、ソフトウェア開発の分野で利用されてい るQAやテストなどの優れた手法を、ITインフラの運用管理 にも応用することができるようになります。 1.手順書のコード化 2.コードのリビジョンの管理 3.チケットシステムによる課題管理 4.コードレビュー 5.テスト 6.デプロイシステム 7.インフラの構成管理 Internet Week 2016 出展: Wikipedia 1〜7をシステマチックに連携させることで Infrastructure as Codeを実現する 45
  • 46. Ansible関連情報 • 公式サイト • https://www.ansible.com/ • Tower公式サイト • https://www.ansible.com/tower • 公式ドキュメント • http://docs.ansible.com/ansible/index.html • ソースコードリポジトリ • https://github.com/ansible/ansible • https://github.com/ansible/ansible-modules-core • https://github.com/ansible/ansible-modules-extras Internet Week 2016 46