Ansible 2.0
AUTOMATION FOR EVERYONE
2016/2/18
TIS OSS Promotion Office
Takeshi Kuramochi
自己紹介
 倉持健史(くらもち たけし)
 現職
 2015/4/1 TIS 入社
 OSS推進室 「OSSの推進活用」 を担当
 職歴
 2011- NetApp.KK
 2005- SIOS Technology, Inc.
 2001- Panasonic Solution Technologies Co., Ltd.
目次
 Ansible とは
 Ansible v2.0 の特徴
 Ansible v2.1 以降
Ansible とは
一言で、
システム構築・運用で、
人が楽をできる
簡単な自動化エンジン
プロビジョニング アクティビティ
アプリケーションサービス
デプロイメント
システムコンフィグレーション
クラウド、
VM、コンテナ起動
OS
インストレーション
Orchestration
Configuration
Bootstrapping
AWS Cobbler
OpenStack
Kickstart
VMware
Capistrano
Fabric
Puppet
Chef
Azure
引用元:Provisioning Toolchain (Velocity2010) by Lee Thompson
Docker
Ansible
Ansible の特徴
 複雑ではない
 共通“言語”
 学習コスト低
 広範囲に適用
 冪等である
 エージェント不要
 本番環境に適用
し易い
UNIX/Linux の場合
 構成される側にエージェント不要
 SSH 接続
 Python 必要
Ansible
SSH
構成される側
UNIX/Linux
Windows の場合
 構成される側にエージェント不要
 HTTP/HTTPS 接続
 PowerShell 3.0以上必要
Ansible
Web Service Management
プロトコル(SOAP)
構成される側
Windows
使い方
必要なマシン
 Ansible がインストールされているマシン
必要なファイル
 Inventory(インベントリ)
 Playbook(プレイブック)
Inventory : my_hosts
Playbook : playbook.yml
Ansible v2.0 の特徴
Topics
 Blocks
 エラーメッセージ改良
 Strategy プラグイン追加
 Include の改良
 変数管理の改良
 モジュールとプラグイン
 Windows 対応のアップデート
 他の改良点
 注意点
ANSIBLE
2.0
Blocks
 関連するタスクをグルーピング
 become, when, tags 他のようなアトリビュートはblock
上にセットでき、含まれる全てのタスクにより継承される
 タスク実行の間(ロールバックのように)エラーをキャッチし処
理するための方法を提供
http://docs.ansible.com/ansible/playbooks_blocks.html
Blocks – グルーピング
tasks:
- block:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
- template: src=templates/src.j2 dest=/etc/foo.conf
- service: name=bar state=started enabled=True
when: ansible_distribution == ‘CentOS’
become: true
become_user: root
Blocks – ネスト
tasks:
- block:
- block:
- name: Install (Debian)
apt: name=apache2 state=present
when: ansible_os_family == “Debian”
- block:
- name: Install (Red Hat)
apt: name=httpd state=present
when: ansible_os_family == “RedHat”
tags: package
Blocks – 変数のスコープ
- hosts: localhost
vars:
example1: lelo
tasks:
- block:
- debug: var=example1
- debug: var=example2
vars:
example2: lola
- debug: var=example2
TASK [debug] ***************************
ok: [localhost] => {
"example1": "lelo"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "lola"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "VARIABLE IS NOT
DEFINED!"
}
Blocks – 変数のスコープ
- hosts: localhost
vars:
example1: lelo
tasks:
- block:
- debug: var=example1
- debug: var=example2
vars:
example2: lola
- debug: var=example2
TASK [debug] ***************************
ok: [localhost] => {
"example1": "lelo"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "lola"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "VARIABLE IS NOT
DEFINED!"
}
Blocks – 変数のスコープ
- hosts: localhost
vars:
example1: lelo
tasks:
- block:
- debug: var=example1
- debug: var=example2
vars:
example2: lola
- debug: var=example2
TASK [debug] ***************************
ok: [localhost] => {
"example1": "lelo"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "lola"
}
TASK [debug] ***************************
ok: [localhost] => {
"example2": "VARIABLE IS NOT
DEFINED!"
}
Blocks – エラーハンドリング #1
- hosts: web
tasks:
- block:
- debug: msg="Hello World"
- command: /bin/false
rescue:
- debug: msg="I caught an error"
- command: /bin/false
when: ansible_os_family == "Debian"
- debug: msg="I handled an error"
always:
- debug: msg="This always executes"
Blocks – エラーハンドリング #2
• 例# any_errors_fatal on blocks works with
# 2.0.1+ (to be released)
---
- hosts: web
tasks:
- block:
- deploy task 1 ...
- deploy task 2 ...
rescue:
- undo task ...
- undo task ...
any_errors_fatal: true
Block内処理 に失敗したら
リカバリ をして
Playbook を抜ける(アボート)する
エラーメッセージ改良
# 1.9.4
ERROR: us is not a legal parameter in an Ansible task or handler
# 2.0.1
ERROR! no action detected in task
The error appears to have been in
'/home/centos/linux/crm/playbook.yml': line 11, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: Changing root password
^ here
構文に関連しない場合のエラーも
詳しい場所のサジェスチョン
Strategy プラグイン追加
 新しく追加されたプラグイン
 linear , free が用意されている
linear(デフォルト、~1.9.xと同じ)
 全ホストの実行終了を待つ
 serial ディレクティブ(並列数)と併用可
free
 全ホストの実行終了を待たずに実行する
http://docs.ansible.com/ansible/playbooks_strategies.html
Include の改良(Loop)
tasks:
- include: users.yml
vars:
user: “{{ item }}”
with_items:
- user1
- user2
- user3
with によるループ処理が可能
以前は、エラーになった使い方
http://docs.ansible.com/ansible/playbooks_loops.html#loops-and-includes
Include の改良(Facts)
# Before v2
- include: RedHat.yml
when: ansible_os_family == "RedHat"
- include: Debian.yml
when: ansible_os_family == "Debian"
# With v2
- include: "{{ ansible_os_family }}".yml
例:ディストリビューション毎にタスクを実行
変数の優先順位 v1.*
1. extra vars
2. vars, vars_files, etc.
3. inventory vars – host vars 、group vars
4. facts
5. role defaults
変数の優先順位 v2.0
1. extra vars(command line –e)
2. task vars (only for the task)
3. block vars (only for tasks in block)
4. role and include vars
5. play vars_files
6. play vars_prompt
7. play vars
8. set_facts
9. registered vars
10. host facts
11. playbook host_vars
12. playbook group_vars
13. inventory host_vars
14. inventory group_vars
15. inventory vars
16. role defaults
高
低
http://docs.ansible.com/ansible/playbooks_variables.html
ansible_ssh_* について
“ssh”が取れて短くなっている
~ v1.9.4 v.2.0
ansible_ssh_user ansible_user
ansible_ssh_host ansible_host
ansible_ssh_port ansible_port
http://docs.ansible.com/ansible/playbooks_variables.html
モジュール と プラグイン
 新しいモジュール数 >200
 EC2 , VMware , CloudStack , OpenStack ,
Windows 関連
 Docker 関連モジュールの改良多し
 inventory スクリプト、callbacks、lookups プラグイ
ンなども数十追加された
Windows 対応のアップデート
 WinRM 接続における以下の設定が行えるようになった
 win_copy で大きなファイルコピー可能
~v1.9では3MB以上のファイルはエラーとなっていた
パラメータ 解説
ansible_winrm_schem httpかhttpsを指定
ansible_winrm_path WinRMエンドポイントのパスを指定
ansible_winrm_realm Kerberos認証のためのRealmを指定
ansible_winrm_transport 1つまたは複数(カンマ区切り)のトランスポートを
指定
ansible_winrm_server_cert_validation ignoreかvalidateを指定
ansible_winrm_* WinRMプロトコルが提供する追加の引数をサポート
http://docs.ansible.com/ansible/intro_windows.html
Windows Module 2.0 Update
Core
win_lineinfile
Extras
win_acl win_iis_virtualdirectory win_regedit
win_dotnet_ngen win_iis_webapplication win_scheduled_task
win_environment win_iis_webapppool win_unzip
win_firewall_rule win_iis_webbinding win_update
win_nssm win_iis_website win_webpicmd
モジュール改良・修正
 win_get_url
プロキシ対応
 azure
現在有効でないオプションを無効化
http://docs.ansible.com/ansible/win_get_url_module.html より
他の改良点
 meta: refresh_inventory
 強制インベントリファイルの再読み込み
 delegate_facts ディレクティブの追加
 委任したホストにfactを適用するか否か
 デフォルト:no(v1.9と以前と同様)
 lookup , jinja2 filters
注意点
 Playbook , Role & Module
 100%下位互換をめざしたが、実際は約98.5%達成
 Include の動的実行の注意
 include されるタスクは実行時に評価される
 tags をつけるときは include にたいして設定する
 include 内の handler からは notify が機能しない
 内部 API の変更
 callback , connection , cache , lookup プラグイン
APIが変わったため、自作のプラグインに修正が必要
 AnsibleのAPI(プラグインでない)と直接統合することで
重大な変更が発生する
Ansible v2.1 以降
ハイライト
 Windowsインフラの整備継続
 ネットワークオートメーションのサポート
 モジュールの拡張と機能強化継続
 Core モジュールリポジトリはメインリポジトリにマージ
 Extra モジュールはインストールのために別パッケージに
v2.1 ロードマップ
 暫定ターゲット
 2016年4月末
 Modules
 Windows:ドメイン管理 , NTLM サポート
 Network:ベンダー系(Cisco , Juniper , etc)
 Docker:リファクタされる(一定の機能のまとまりで分離, docker_****)
 VMware , Azure (要注意)
https://github.com/ansible/ansible/blob/devel/ROADMAP.md
Ansible Contributor Summit
 2016/2/17
 Topics
 CoreやExtrasのコントリビューションについて
 PRs、ISSUEのワークフロー
 ロードマップの在り方
 アーキテクチャ
 ドキュメント
 テスト
 Galaxy
https://github.com/ansible/ansible/blob/devel/ROADMAP.md
参考
 Ansible 2.0 Launch
 http://www.ansible.com/blog/ansible-2.0-launch
 CHANGELOG.md
 https://github.com/ansible/ansible/blob/devel/CHANGELOG.md
 What’s New in Ansible 2.0 (Webinar)
 https://www.ansible.com/webinars-training
 Ansible 2.0 and Beyond (James Cammarata)
 Roadmap
 https://github.com/ansible/ansible/blob/devel/ROADMAP.md
参考
 Ansible 2.0 @r_rudi 若山史郎さん (in Ansible Meetup Tokyo)
 https://speakerdeck.com/shirou/ansible-2-dot-0-at-ansible-meetup-in-tokyo-2015-dot-09
 Ansible 2.0 変更点まとめ
 http://qiita.com/yuta_h3/items/30dcfd939cb13b7e24fa
 Ansible で Windows Server 2012を構成する
 http://qiita.com/tksarah/items/5f5916ec9236f24ff2a8
Ansible 2.0 のサマライズとこれから

Ansible 2.0 のサマライズとこれから

  • 1.
    Ansible 2.0 AUTOMATION FOREVERYONE 2016/2/18 TIS OSS Promotion Office Takeshi Kuramochi
  • 2.
    自己紹介  倉持健史(くらもち たけし) 現職  2015/4/1 TIS 入社  OSS推進室 「OSSの推進活用」 を担当  職歴  2011- NetApp.KK  2005- SIOS Technology, Inc.  2001- Panasonic Solution Technologies Co., Ltd.
  • 3.
    目次  Ansible とは Ansible v2.0 の特徴  Ansible v2.1 以降
  • 4.
  • 5.
  • 6.
  • 7.
    Ansible の特徴  複雑ではない 共通“言語”  学習コスト低  広範囲に適用  冪等である  エージェント不要  本番環境に適用 し易い
  • 8.
    UNIX/Linux の場合  構成される側にエージェント不要 SSH 接続  Python 必要 Ansible SSH 構成される側 UNIX/Linux
  • 9.
    Windows の場合  構成される側にエージェント不要 HTTP/HTTPS 接続  PowerShell 3.0以上必要 Ansible Web Service Management プロトコル(SOAP) 構成される側 Windows
  • 10.
    使い方 必要なマシン  Ansible がインストールされているマシン 必要なファイル Inventory(インベントリ)  Playbook(プレイブック) Inventory : my_hosts Playbook : playbook.yml
  • 11.
  • 12.
    Topics  Blocks  エラーメッセージ改良 Strategy プラグイン追加  Include の改良  変数管理の改良  モジュールとプラグイン  Windows 対応のアップデート  他の改良点  注意点 ANSIBLE 2.0
  • 13.
    Blocks  関連するタスクをグルーピング  become,when, tags 他のようなアトリビュートはblock 上にセットでき、含まれる全てのタスクにより継承される  タスク実行の間(ロールバックのように)エラーをキャッチし処 理するための方法を提供 http://docs.ansible.com/ansible/playbooks_blocks.html
  • 14.
    Blocks – グルーピング tasks: -block: - yum: name={{ item }} state=installed with_items: - httpd - memcached - template: src=templates/src.j2 dest=/etc/foo.conf - service: name=bar state=started enabled=True when: ansible_distribution == ‘CentOS’ become: true become_user: root
  • 15.
    Blocks – ネスト tasks: -block: - block: - name: Install (Debian) apt: name=apache2 state=present when: ansible_os_family == “Debian” - block: - name: Install (Red Hat) apt: name=httpd state=present when: ansible_os_family == “RedHat” tags: package
  • 16.
    Blocks – 変数のスコープ -hosts: localhost vars: example1: lelo tasks: - block: - debug: var=example1 - debug: var=example2 vars: example2: lola - debug: var=example2 TASK [debug] *************************** ok: [localhost] => { "example1": "lelo" } TASK [debug] *************************** ok: [localhost] => { "example2": "lola" } TASK [debug] *************************** ok: [localhost] => { "example2": "VARIABLE IS NOT DEFINED!" }
  • 17.
    Blocks – 変数のスコープ -hosts: localhost vars: example1: lelo tasks: - block: - debug: var=example1 - debug: var=example2 vars: example2: lola - debug: var=example2 TASK [debug] *************************** ok: [localhost] => { "example1": "lelo" } TASK [debug] *************************** ok: [localhost] => { "example2": "lola" } TASK [debug] *************************** ok: [localhost] => { "example2": "VARIABLE IS NOT DEFINED!" }
  • 18.
    Blocks – 変数のスコープ -hosts: localhost vars: example1: lelo tasks: - block: - debug: var=example1 - debug: var=example2 vars: example2: lola - debug: var=example2 TASK [debug] *************************** ok: [localhost] => { "example1": "lelo" } TASK [debug] *************************** ok: [localhost] => { "example2": "lola" } TASK [debug] *************************** ok: [localhost] => { "example2": "VARIABLE IS NOT DEFINED!" }
  • 19.
    Blocks – エラーハンドリング#1 - hosts: web tasks: - block: - debug: msg="Hello World" - command: /bin/false rescue: - debug: msg="I caught an error" - command: /bin/false when: ansible_os_family == "Debian" - debug: msg="I handled an error" always: - debug: msg="This always executes"
  • 20.
    Blocks – エラーハンドリング#2 • 例# any_errors_fatal on blocks works with # 2.0.1+ (to be released) --- - hosts: web tasks: - block: - deploy task 1 ... - deploy task 2 ... rescue: - undo task ... - undo task ... any_errors_fatal: true Block内処理 に失敗したら リカバリ をして Playbook を抜ける(アボート)する
  • 21.
    エラーメッセージ改良 # 1.9.4 ERROR: usis not a legal parameter in an Ansible task or handler # 2.0.1 ERROR! no action detected in task The error appears to have been in '/home/centos/linux/crm/playbook.yml': line 11, column 7, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: tasks: - name: Changing root password ^ here 構文に関連しない場合のエラーも 詳しい場所のサジェスチョン
  • 22.
    Strategy プラグイン追加  新しく追加されたプラグイン linear , free が用意されている linear(デフォルト、~1.9.xと同じ)  全ホストの実行終了を待つ  serial ディレクティブ(並列数)と併用可 free  全ホストの実行終了を待たずに実行する http://docs.ansible.com/ansible/playbooks_strategies.html
  • 23.
    Include の改良(Loop) tasks: - include:users.yml vars: user: “{{ item }}” with_items: - user1 - user2 - user3 with によるループ処理が可能 以前は、エラーになった使い方 http://docs.ansible.com/ansible/playbooks_loops.html#loops-and-includes
  • 24.
    Include の改良(Facts) # Beforev2 - include: RedHat.yml when: ansible_os_family == "RedHat" - include: Debian.yml when: ansible_os_family == "Debian" # With v2 - include: "{{ ansible_os_family }}".yml 例:ディストリビューション毎にタスクを実行
  • 25.
    変数の優先順位 v1.* 1. extravars 2. vars, vars_files, etc. 3. inventory vars – host vars 、group vars 4. facts 5. role defaults
  • 26.
    変数の優先順位 v2.0 1. extravars(command line –e) 2. task vars (only for the task) 3. block vars (only for tasks in block) 4. role and include vars 5. play vars_files 6. play vars_prompt 7. play vars 8. set_facts 9. registered vars 10. host facts 11. playbook host_vars 12. playbook group_vars 13. inventory host_vars 14. inventory group_vars 15. inventory vars 16. role defaults 高 低 http://docs.ansible.com/ansible/playbooks_variables.html
  • 27.
    ansible_ssh_* について “ssh”が取れて短くなっている ~ v1.9.4v.2.0 ansible_ssh_user ansible_user ansible_ssh_host ansible_host ansible_ssh_port ansible_port http://docs.ansible.com/ansible/playbooks_variables.html
  • 28.
    モジュール と プラグイン 新しいモジュール数 >200  EC2 , VMware , CloudStack , OpenStack , Windows 関連  Docker 関連モジュールの改良多し  inventory スクリプト、callbacks、lookups プラグイ ンなども数十追加された
  • 29.
    Windows 対応のアップデート  WinRM接続における以下の設定が行えるようになった  win_copy で大きなファイルコピー可能 ~v1.9では3MB以上のファイルはエラーとなっていた パラメータ 解説 ansible_winrm_schem httpかhttpsを指定 ansible_winrm_path WinRMエンドポイントのパスを指定 ansible_winrm_realm Kerberos認証のためのRealmを指定 ansible_winrm_transport 1つまたは複数(カンマ区切り)のトランスポートを 指定 ansible_winrm_server_cert_validation ignoreかvalidateを指定 ansible_winrm_* WinRMプロトコルが提供する追加の引数をサポート http://docs.ansible.com/ansible/intro_windows.html
  • 30.
    Windows Module 2.0Update Core win_lineinfile Extras win_acl win_iis_virtualdirectory win_regedit win_dotnet_ngen win_iis_webapplication win_scheduled_task win_environment win_iis_webapppool win_unzip win_firewall_rule win_iis_webbinding win_update win_nssm win_iis_website win_webpicmd
  • 31.
  • 32.
    他の改良点  meta: refresh_inventory 強制インベントリファイルの再読み込み  delegate_facts ディレクティブの追加  委任したホストにfactを適用するか否か  デフォルト:no(v1.9と以前と同様)  lookup , jinja2 filters
  • 33.
    注意点  Playbook ,Role & Module  100%下位互換をめざしたが、実際は約98.5%達成  Include の動的実行の注意  include されるタスクは実行時に評価される  tags をつけるときは include にたいして設定する  include 内の handler からは notify が機能しない  内部 API の変更  callback , connection , cache , lookup プラグイン APIが変わったため、自作のプラグインに修正が必要  AnsibleのAPI(プラグインでない)と直接統合することで 重大な変更が発生する
  • 34.
  • 35.
    ハイライト  Windowsインフラの整備継続  ネットワークオートメーションのサポート モジュールの拡張と機能強化継続  Core モジュールリポジトリはメインリポジトリにマージ  Extra モジュールはインストールのために別パッケージに
  • 36.
    v2.1 ロードマップ  暫定ターゲット 2016年4月末  Modules  Windows:ドメイン管理 , NTLM サポート  Network:ベンダー系(Cisco , Juniper , etc)  Docker:リファクタされる(一定の機能のまとまりで分離, docker_****)  VMware , Azure (要注意) https://github.com/ansible/ansible/blob/devel/ROADMAP.md
  • 37.
    Ansible Contributor Summit 2016/2/17  Topics  CoreやExtrasのコントリビューションについて  PRs、ISSUEのワークフロー  ロードマップの在り方  アーキテクチャ  ドキュメント  テスト  Galaxy https://github.com/ansible/ansible/blob/devel/ROADMAP.md
  • 38.
    参考  Ansible 2.0Launch  http://www.ansible.com/blog/ansible-2.0-launch  CHANGELOG.md  https://github.com/ansible/ansible/blob/devel/CHANGELOG.md  What’s New in Ansible 2.0 (Webinar)  https://www.ansible.com/webinars-training  Ansible 2.0 and Beyond (James Cammarata)  Roadmap  https://github.com/ansible/ansible/blob/devel/ROADMAP.md
  • 39.
    参考  Ansible 2.0@r_rudi 若山史郎さん (in Ansible Meetup Tokyo)  https://speakerdeck.com/shirou/ansible-2-dot-0-at-ansible-meetup-in-tokyo-2015-dot-09  Ansible 2.0 変更点まとめ  http://qiita.com/yuta_h3/items/30dcfd939cb13b7e24fa  Ansible で Windows Server 2012を構成する  http://qiita.com/tksarah/items/5f5916ec9236f24ff2a8