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

40
Ansible 2.0 AUTOMATION FOR EVERYONE 2016/2/18 TIS OSS Promotion Office Takeshi Kuramochi

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

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

Ansible 2.0AUTOMATION FOR EVERYONE

2016/2/18

TIS OSS Promotion Office

Takeshi Kuramochi

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

自己紹介

倉持健史(くらもち たけし)

現職 2015/4/1 TIS 入社 OSS推進室 「OSSの推進活用」 を担当

職歴 2011- NetApp.KK 2005- SIOS Technology, Inc. 2001- Panasonic Solution Technologies Co., Ltd.

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

目次

Ansible とは

Ansible v2.0 の特徴

Ansible v2.1 以降

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

Ansible とは

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

一言で、

システム構築・運用で、

人が楽をできる

簡単な自動化エンジン

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

プロビジョニング アクティビティ

アプリケーションサービスデプロイメント

システムコンフィグレーション

クラウド、VM、コンテナ起動

OSインストレーション

Orchestration

Configuration

Bootstrapping

AWS Cobbler

OpenStack

KickstartVMware

Capistrano

Fabric

Puppet

Chef

Azure

引用元:Provisioning Toolchain (Velocity2010) by Lee Thompson

Docker

Ansible

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

Ansible の特徴

複雑ではない

共通“言語”

学習コスト低

広範囲に適用

冪等である

エージェント不要

本番環境に適用し易い

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

UNIX/Linux の場合

構成される側にエージェント不要

SSH 接続

Python 必要

Ansible

SSH

構成される側UNIX/Linux

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

Windows の場合

構成される側にエージェント不要

HTTP/HTTPS 接続

PowerShell 3.0以上必要

Ansible

Web Service Managementプロトコル(SOAP)

構成される側Windows

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

使い方

必要なマシン Ansible がインストールされているマシン

必要なファイル Inventory(インベントリ) Playbook(プレイブック)

Inventory : my_hosts

Playbook : playbook.yml

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

Ansible v2.0 の特徴

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

Topics

Blocks エラーメッセージ改良 Strategy プラグイン追加 Include の改良 変数管理の改良 モジュールとプラグイン Windows 対応のアップデート 他の改良点 注意点

ANSIBLE2.0

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

Blocks

関連するタスクをグルーピング

become, when, tags 他のようなアトリビュートはblock上にセットでき、含まれる全てのタスクにより継承される

タスク実行の間(ロールバックのように)エラーをキャッチし処理するための方法を提供

http://docs.ansible.com/ansible/playbooks_blocks.html

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

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

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

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

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

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!"

}

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

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!"

}

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

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!"

}

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

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"

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

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 を抜ける(アボート)する

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

エラーメッセージ改良# 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

構文に関連しない場合のエラーも詳しい場所のサジェスチョン

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

Strategy プラグイン追加

新しく追加されたプラグイン

linear , free が用意されている

linear(デフォルト、~1.9.xと同じ) 全ホストの実行終了を待つ

serial ディレクティブ(並列数)と併用可

free 全ホストの実行終了を待たずに実行する

http://docs.ansible.com/ansible/playbooks_strategies.html

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

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

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

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

例:ディストリビューション毎にタスクを実行

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

変数の優先順位 v1.*

1. extra vars

2. vars, vars_files, etc.

3. inventory vars – host vars 、group vars

4. facts

5. role defaults

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

変数の優先順位 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

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

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

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

モジュール と プラグイン

新しいモジュール数 >200 EC2 , VMware , CloudStack , OpenStack , Windows 関連 Docker 関連モジュールの改良多し

inventory スクリプト、callbacks、lookups プラグインなども数十追加された

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

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

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

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

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

モジュール改良・修正

win_get_urlプロキシ対応

azure現在有効でないオプションを無効化

http://docs.ansible.com/ansible/win_get_url_module.html より

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

他の改良点

meta: refresh_inventory 強制インベントリファイルの再読み込み

delegate_facts ディレクティブの追加 委任したホストにfactを適用するか否か デフォルト:no(v1.9と以前と同様)

lookup , jinja2 filters

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

注意点 Playbook , Role & Module 100%下位互換をめざしたが、実際は約98.5%達成

Include の動的実行の注意 include されるタスクは実行時に評価される tags をつけるときは include にたいして設定する include 内の handler からは notify が機能しない

内部 API の変更 callback , connection , cache , lookup プラグイン

APIが変わったため、自作のプラグインに修正が必要 AnsibleのAPI(プラグインでない)と直接統合することで重大な変更が発生する

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

Ansible v2.1 以降

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

ハイライト

Windowsインフラの整備継続

ネットワークオートメーションのサポート

モジュールの拡張と機能強化継続

Core モジュールリポジトリはメインリポジトリにマージ

Extra モジュールはインストールのために別パッケージに

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

v2.1 ロードマップ

暫定ターゲット

2016年4月末

Modules Windows:ドメイン管理 , NTLM サポート

Network:ベンダー系(Cisco , Juniper , etc)

Docker:リファクタされる(一定の機能のまとまりで分離, docker_****)

VMware , Azure (要注意)

https://github.com/ansible/ansible/blob/devel/ROADMAP.md

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

Ansible Contributor Summit

2016/2/17

Topics CoreやExtrasのコントリビューションについて PRs、ISSUEのワークフロー ロードマップの在り方 アーキテクチャ ドキュメント テスト Galaxy

https://github.com/ansible/ansible/blob/devel/ROADMAP.md

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

参考 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

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

参考 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

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