SlideShare a Scribd company logo
株式会社 エーピーコミュニケーションズ
横地 晃(@akira6592)
2019/05/31
Ansible Night in Osaka 2019.05
はじめに
l 2019/05/16 に Ansible 2.8.0 がリリースされました。
l 様々な仕様変更や機能追加の中から、気になった
な点をご紹介します。
2
便利
地味に
便利
ちょっと
注意
本発表の位置づけ
3
全変更
解説ブログ
本発表
CHNAGELOG
https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst
Porting Guide
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html
Commits
https://github.com/ansible/ansible/compare/v2.8.0...devel
Ansible 2.8 リリース、便利機能や注意点まとめ
https://tekunabe.hatenablog.jp/entry/2019/05/16/ansible28
⾃⼰紹介
4
名前 横地 晃
所属 株式会社エーピーコミュニケーションズ
業務 ネットワーク⾃動化関連の技術開発
@akira6592
Software Design
2018年12⽉号 Ansible 特集
https://tekunabe.hatenablog.jp
https://www.slideshare.net/akira6592/
ブログ(てくなべ)
過去発表資料
https://gihyo.jp/magazine/SD/archive/2018/201812
JANOG44 Meeting in Kobe Day3 (2019/7/26)
ここからはじめよう、運⽤⾃動化
⾃⼰紹介(最近のできごと)
5
先週 EX407 に受かりました
https://techblog.ap-com.co.jp/entry/2019/05/27/ansible_ex407
受験体験記(勉強⽅法など)
Red Hat Certificate of Expertise in Ansible Automation
内容
6
l 仕様変更・追加
l 追加プラグイン
l 追加モジュール
l まとめ
7
仕様変更・追加
8
Python Interpreter Discovery 機能
l リモートホスト上で利⽤する Python の
インタープリターを探す機能
◦ /usr/bin/python がない場合に本機能で⾒つけ出す
◦ Ansible 2.8 時点のデフォルトの挙動、将来は変更される予定
◦ 例えば RHEL8 のように /usr/bin/python がない環境
でも、ansible_python_interpreter を指定せずに、
/usr/libexec/platform-python を⾒つけ出せる
https://rheb.hatenablog.com/entry/ansible_interpreter_discovery
https://docs.ansible.com/ansible/2.8/reference_appendices/interpreter_discovery.html
便利
9
PLAY RECAP に skipped、rescued、ignored 追加
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html#plugins
地味に
便利
※rescue された fail は failed にカウントされなくなった
追加
10
retry file の⽣成がデフォルトで無効に
l Playbook 実⾏エラー時に、エラーホスト名
が記載される retry ファイルの⽣成が
デフォルトで無効になった
$ ansible-config dump | grep RETRY_FILES_ENABLED
RETRY_FILES_ENABLED(default) = False
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html#retry-file-creation-default
地味に
便利
$ ls –l
(…略…) playbook.yml
(…略…) playbook.retry
デフォルトでこれが
⽣成されなくなった
11
https://docs.ansible.com/ansible/2.8/cli/ansible.html
https://docs.ansible.com/ansible/2.8/cli/ansible-playbook.html
--su / --sudo 系オプションが削除
ちょっと
注意
削除された
オプション
--su、--su-user、--ask-su-pass
--sudo、--sudo-user 、--ask-sudo-pass
今後も利⽤できる
オプション
--become
--become-user
--become-method(sudo | su | runas | enalbe など)
--ask-become-pass
l ansible/ansible-playbook コマンドの
権限昇格オプションが --become 系に統⼀
12
l now()
◦ 第⼀引数: UTC 指定かどうか(True/False)。 デフォ
ルトは False。
◦ 第⼆引数: フォーマット
◦ 書式 https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
https://docs.ansible.com/ansible/2.8/user_guide/playbooks_templating.html#get-the-current-time
jinja2 で現在時刻を now() で取得可能に
- name: display date time
debug:
msg: "{{ now() }}" # 2019-04-29 21:03:16.958620
- name: display date time
debug:
msg: "{{ now(False, '%Y%m%d_%H%M%S') }}" # 20190429_210316
【例】
地味に
便利
13
https://docs.ansible.com/ansible/2.8/user_guide/playbooks_templating.html#get-the-current-time
jinja2 で現在時刻を now() で取得可能に
書式 どこの時刻か
now() コントロールホストの時刻
lookup('pipe', 'date') コントロールホストの時刻
ansible_facts.date_time リモートホストの fact 収集時の時刻
地味に
便利
(続き)
NEW
14
l ⼊れ⼦になった未定義のキー、インデックス
に default フィルターを利⽤可能に
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html#jinja-undefined-values
未定義変数へのアクセス柔軟性が向上
"{{ foo.bar.baz | default('DEFAULT') }}"
【例】foo ⾃体が未定義の場合でもこのように書ける
* 2.7 では エラー「The error was: ‘foo’ is undefined」になってしまう
{{ foo.bar.baz if (foo is defined and foo.bar is defined and foo.bar.baz is defined) else 'DEFAULT' }}
{{ ((foo | default({})).bar | default({})).baz | default('DEFAULT') }}
【参考】2.7 での実現⽅法
または
地味に
便利
15
https://github.com/ansible/ansible/pull/49737
- hosts: iosal
gather_facts: no
vars:
command: version
tasks:
- name:
ios_command:
commands:
- show version
register: "result_{{ command }}”
# ^ 変数名 result_version を期待
- name:
debug:
msg:
- "{{ result_version }}"
register でこのような
テンプレート構⽂は
使⽤できなくなった
register 変数名等でテンプレートが使⽤不可に
変数未定義エラーになってしまう
ちょっと
注意
16
https://github.com/ansible/ansible/pull/49737
register 変数名等でテンプレートが使⽤不可に
TASK [ios_command] ******************************************
[WARNING]: "register" is not templatable, but we found:
result_{{ command }}, it will not betemplated and will be used
"as is".
(…略…)
ok: [iosal1]
TASK [debug] ************************************************
fatal: [iosal1]: FAILED! => {"msg": "The task includes an
option with an undefined variable. The error was:
'result_version' is undefined¥n¥nThe error appears to be in
(…略…)
テンプレート構⽂使⽤不可のWARNING
変数未定義エラー
前述のPlaybook実⾏時
ちょっと
注意
(続き)
17
https://docs.ansible.com/ansible/2.8/plugins/connection/ssh.html
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html#plugins
認証情報の変数名の標準化
ちょっと
注意
ユーザー名の変数 パスワードの変数
利⽤可能 ansible_<conn-type>_user ansible_<conn-type>_password
利⽤可能だが
将来⾮推奨になる
可能性あり
ansible_<conn-type>_username ansible_<conn-type>_pass
コネクションタイプ
に⾮依存な変数
※特に理由がなければこれを利⽤
ansible_user ansible_password
<conn-type> には、コネクションタイプ ssh などが⼊る
18
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html#module-option-conversion-to-string
https://docs.ansible.com/ansible/2.8/reference_appendices/config.html#string-conversion-action
⽂字列変換時の WARNING
- name: command test
ios_command:
commands:
- yes
TASK [command test] *********************************************
[WARNING]: The value True (type bool) in a string field was
converted to u'True' (type string). If this does not look like
what you expect, quote the entire value to ensure it does
not change.
Playbook実⾏時
'True' という⽂字に列変換された旨の WARNING
⽂字列を指定するオプションに yes を
クォーテーションなしで指定した場合・・
ちょっと
注意
19
paramiko が同梱されなくなる
ちょっと
注意
https://docs.ansible.com/ansible/2.8/installation_guide/intro_installation.html
https://tekunabe.hatenablog.jp/entry/2019/05/19/ansible_paramiko_error
- hosts: testsv
gather_facts: no
connection: paramiko
tasks:
- name: yum test
yum:
name: httpd
paramiko を利⽤しようとすると・・
l「paramiko is not installed: No module named paramiko」というエラーに
l 必要な場合は「pip install paramiko」 でインストール
l 明⽰的に paramiko を指定していなくても、内部で利⽤されていることがある
20
Windows ホストへの SSH 接続サポート
https://speakerdeck.com/hiyokotaisa/rhtn-ansible-2-dot-8-x-windows
https://docs.ansible.com/ansible/2.8/user_guide/windows_faq.html#can-i-connect-to-windows-hosts-over-ssh
https://docs.ansible.com/ansible/2.8/user_guide/windows_setup.html#windows-ssh-setup
便利
l WinRM に加えて SSH 接続をサポート(experimental)
追加サポート
Windows
ansible_connection: ssh
ansible_connection: winrm
21
グループ名に利⽤できる⽂字の厳格化
ちょっと
注意
https://docs.ansible.com/ansible/2.8/reference_appendices/config.html#transform-invalid-group-chars
https://github.com/ansible/ansible/pull/52748
l 数字はじまりや、ハイフンなどの記号(*1)は不正
◦ TRANSFORM_INVALID_GROUP_CHARS の設定によって置換するかどうか
決める。デフォルトでは WARNING 表⽰(*2)
のみで置換しない。
正当な例 不正な例
testgroup 英字から始まる 1testgroup 数字から始まる
testgroup1 数字を含む test-group ハイフンを含む
test_group アンダーバーを含む test.group ドットを含む
*1 正規表現 ^[¥d¥W]|[^¥w] にマッチする⽂字列
*2 [DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change,
but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
22
新規プラグイン
https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst#new-plugins
23
https://docs.ansible.com/ansible/2.8/plugins/inventory/netbox.html
NetBox をインベントリとして利⽤可能に
l デバイスやIPアドレスなどをWebで管理
できるツール NetBox をインベントリとして
利⽤可能に
便利
24
https://docs.ansible.com/ansible/2.8/plugins/inventory/netbox.html
NetBox をインベントリとして利⽤可能に
plugin: netbox
api_endpoint: https://<endpoint>/
token: <token>
group_by: # グループ化したい定義単位(任意)
- manufacturers
- device_roles
- sites
便利
このようなファイルを
ansible-playbook などのコマンドの
-i オプションに指定
(続き)
25
https://docs.ansible.com/ansible/2.8/plugins/inventory/netbox.html
NetBox をインベントリとして利⽤可能に
$ ansible-inventory -i i_nb.yml --host cat3750-1
{
"ansible_host": "172.16.0.101",
"device_roles": [
"switch"
],
(…略…)
}
$ ansible-inventory -i i_nb.yml --graph
@all:
|--@device_roles_firewall:
| |--vsrx1
| |--vsrx2
| |--vsrx3
|--@device_roles_switch:
| |--cat3750-1
| |--cat3750-2
|--@manufacturers_cisco:
| |--cat3750-1
| |--cat3750-2
|--@manufacturers_juniper:
| |--vsrx1
| |--vsrx2
| |--vsrx3
|--@sites_my_site:
| |--cat3750-1
| |--cat3750-2
| |--vsrx1
| |--vsrx2
| |--vsrx3
|--@ungrouped:
インベントリ
としての NetBox
グループ化も可能
便利
(続き)
26
新規モジュール
Ansible 2.7 2078個
Ansible 2.8 2832個
https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst#new-modules
27
https://docs.ansible.com/ansible/devel/modules/read_csv_module.html
https://tekunabe.hatenablog.jp/entry/2019/03/29/ansible_read_csv_intro
read_csv モジュール
l CSVファイルをリストやディクショナリとして
読み込む
- hosts: testsv
gather_facts: no
tasks:
- name: Read users
read_csv:
path: users.csv
register: users
delegate_to: localhost
# ^ 省略するとリモートのファイルを参照
- name: debug csv
debug:
msg: "{{ users }}"
"msg": {
(…略…)
"list": [
{
"gid": "500",
"name": "dag",
"uid": "500"
},
{
"gid": "500",
"name": "jeroen",
"uid": "501"
}
]
}
name,uid,gid
dag,500,500
jeroen,501,500
読み込んだ
Playbook 実⾏
地味に
便利
CSV
28
サンプル引⽤元 https://docs.ansible.com/ansible/2.8/modules/ios_bgp_module.html#examples
*_bgp モジュール
- name: configure global bgp as 64496
ios_bgp:
config:
bgp_as: 64496
router_id: 192.0.2.1
log_neighbor_changes: True
neighbors:
- neighbor: 203.0.113.5
remote_as: 64511
timers:
keepalive: 300
holdtime: 360
min_neighbor_holdtime: 360
- neighbor: 198.51.100.2
remote_as: 64498
networks:
- prefix: 198.51.100.0
route_map: RMAP_1
- prefix: 192.0.2.0
masklen: 23
address_family:
- afi: ipv4
safi: unicast
redistribute:
- protocol: ospf
id: 223
metric: 10
operation: merge
広報設定
ネイバー設定
再配布設定
* 今まではコマンドを直接指定する
ios_config で設定
便利
ios_bgp の例
29
https://docs.ansible.com/ansible/2.8/modules/list_of_cloud_modules.html#alicloud
クラウド系モジュール
便利
(⼀例)
分類 追加数(*1)
★ alicloud 2
amazon 7
azure 75
docker 11
google 33
★ podman 2
vmware 30
★: 本分類のモジュール⾃体が今回初登場
*1: ansible-doc -j コマンド出⼒によるカウント
30
まとめ
まとめ
31
l Ansible 2.8 では多数のモジュール追加や、
仕様変更、便利な機能追加のほかに、
ちょっとした注意点もありました。
l アップデートの際の参考になれば幸いです。
便利
地味に
便利
ちょっと
注意
• Python Interpreter Discovery
• NetBox をインベントリとして利⽤可能に
• retry file の⽣成がデフォルトで無効に
• read_csv モジュール
• register 変数名等でテンプレートが使⽤不可に
• グループ名に利⽤できる⽂字の厳格化
例:
参考資料
32
l CHANGELOG
l https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst#v2-8-0
l Porting Guide
l https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html
l 公式ブログ Ansible 2.8 情報
l https://www.ansible.com/blog/whats-new-in-red-hat-ansible-engine-2.8
l ⽇本語解説個⼈ブログ
l https://tekunabe.hatenablog.jp/entry/2019/05/16/ansible28

More Related Content

Ansible 2.8 アップデート情報 -機能追加と注意点-