Ansible 2.0 のサマライズとこれから
-
Upload
takeshi-kuramochi -
Category
Technology
-
view
3.255 -
download
3
Transcript of Ansible 2.0 のサマライズとこれから
Ansible 2.0AUTOMATION 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
KickstartVMware
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 対応のアップデート 他の改良点 注意点
ANSIBLE2.0
Blocks
関連するタスクをグルーピング
become, when, tags 他のようなアトリビュートはblock上にセットでき、含まれる全てのタスクにより継承される
タスク実行の間(ロールバックのように)エラーをキャッチし処理するための方法を提供
http://docs.ansible.com/ansible/playbooks_blocks.html
Blocks – グルーピングtasks:
- block:
- yum: name={{ item }} state=installedwith_items:- httpd- memcached
- template: src=templates/src.j2 dest=/etc/foo.conf
- service: name=bar state=started enabled=True
when: ansible_distribution == ‘CentOS’become: truebecome_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 maybe 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
- user3with によるループ処理が可能
以前は、エラーになった使い方
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 vars5. play vars_files6. play vars_prompt7. play vars8. set_facts9. registered vars10. host facts11. playbook host_vars12. playbook group_vars13. inventory host_vars14. inventory group_vars15. inventory vars16. role defaults
高
低http://docs.ansible.com/ansible/playbooks_variables.html
ansible_ssh_* について
“ssh”が取れて短くなっている
~ v1.9.4 v.2.0
ansible_ssh_user ansible_useransible_ssh_host ansible_hostansible_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
Corewin_lineinfile
Extraswin_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