Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ansible 2.10 と Collection
株式会社エーピーコミュニケーションズ
技術開発部 自動化グループ
横地 晃
1
2020/10/07 AP Tech Fest
内部構造が変わった Ansible のおはなし
はじめに
 先日、Ansible 2.10.0 がリリースされました。
 Collection によるモジュールの配布が本格的となり、
標準モジュール は 70程度に減りました。
 Ansible 2.10 と Collection の関...
自己紹介
3
所属
(株)エーピーコミュニケーションズ
技術開発部 自動化グループ
業務 ネットワーク自動化の支援、各種アウトプット
コミュニティ Ansible ユーザー会、JANOG など
共著
寄稿
Ansible 実践ガイド 第3版
S...
内容
 Ansible 2.10 の基本
 Ansible 2.10 の導入
 Collection の操作
 今までの Playbook は動くの?
 気になるアップデート
 まとめ
4
Ansible 2.10 の基本
標準モジュールが激減
5
Collection の本格運用により標準モジュールが激減
 Ansible 2.9 までは 3000 以上あった標準モジュールは 2.10 では約 70 に
 他のモジュールは「Collection」による配布に移行
 ポータビリティは...
基本機能と標準モジュールは ansible-base に
 基本機能と標準モジュールは ansible-base と呼ばれる
 「pip install ansible」は ansible-base と 、移行された Collection ...
Collection
Collection
そもそも Collection とは
 モジュールやプラグインなどをまとめて配布する単位
 Ansible Galaxy や Automation Hub 経由で配布
 リポジトリは https...
Ansible Galaxy による Collection の配布
 例: ansible.netcommon Collection
 https://galaxy.ansible.com/ansible/netcommon
9
なんで ansible-base と collection に分かれたの?(私見含む)
 ansible 本体と Collection のリリースサイクルを分類
 本体の安定性と新機能の取捨選択を両立
 「新しいモジュールを使いたいけど ...
Ansible 2.10 の導入
インストール、アップグレード
11
インストール
 ansible-base
 ansible 基本機能と標準モジュール
 ansible
 ansible-base と 移行された Collection のセット
12
pip install ansible-base
...
アップグレード
 ansible 2.9 から ansible 2.10 へのアップグレード
 一度アインインストールしてから再インストール
 直接アップグレードできないのは ansible 2.10.0 時点の Known Issue
...
Collection の操作
インストール、アップグレード、確認
14
これからは Collection を操作する機会が増えそう
 ansible のセットの Collection をアップグレードしたい場合
 ansible-base をインストールしたあと、標準モジュール以外を利用する場合
 など
15
Collection のインストール
 Ansible Galaxy や Automation Hub で対象の Collection を見つけてインストール
 デフォルトでは ~/.ansible/collections/ansible_...
Collection のアップグレード
 現状、アップグレード専用コマンドがないため、
-f オプション で強制的に最新をインストール
17
ansible-galaxy collection install コレクション名 -f
※ Ins...
Collection の確認
 インストールした Collection をコマンドで確認可能
 デフォルトでは ~/.ansible/collections/ansible_collections/ 配下を検索
 つまり pip inst...
補足1: Ansible Tower で利用する Collection を自動インストールする
 プロジェクトの collections/requirements.yml に
必要な Collection 名を指定しておくと自動でインストール...
補足2: Collection と Red Hat サポートなど
 Ansible Supported Collections, Versioning, and Release Strategy
 https://access.redhat...
今までの Playbook は動くの?
気になるポータビリティ
21
サンプル Playbook(準備)
 環境
 python 3.6.8、新規 venv に paramiko インストール
 pip install ansible でインストール
 Playbook
 Ansible 2.9 向けに...
サンプル Playbook(実行)
 Playbook の修正なしに動いた
23
(a2100) [root@centos7 stumble]# ansible-playbook -i inventory.ini ios_show.yml
P...
動く理由1: Collection がセットだから
 「pip install ansible」で、移行された Collection もセットでインストールされる
 そのため 2.9 までの標準モジュールが 2.10 でも利用できる
 た...
動く理由2: リダイレクト機能があるから
 コレクション名を含まないモジュール名の指定(例 ios_command)でも
cisco.ios.ios_command のような FQCN に解決するリダイレクト機能がある
 ansible-b...
とはいえ Porting Guide はいつも通り要チェック
 バージョンごとに移行時の注意点などが記載されている
 Ansible-base 2.10 Porting Guide
 https://docs.ansible.com/an...
タスクごとの FQCN 指定が推奨
27
引用元: What's new with Ansible Content Collections
https://www.ansible.com/resources/webinars-training/...
気になるアップデート
CHANGELOG などから地味に便利、ちょっと注意なアップデートを抜粋
28
地味に便利
 タスクのタイムアウトが設定可能に
 接続時間+処理時間のタイムアウトを指定、デフォルトは0(タイムアウトなし)
 https://docs.ansible.com/ansible/latest/reference_appen...
ちょっと注意
 CONDITIONAL_BARE_VARS のデフォルトが False に変更
 assert モジュールや when で 変数名のみを指定してる場合は注意
 2.9で [DEPRECATION WARNING]: eva...
まとめ
31
まとめ
 ansible 2.10 から Collection の本格運用が開始
 ansible-base = 基本機能 + 標準モジュール
 ansible = ansible-base + 移行された Collection
 Co...
参考
 公式
 Ansible Collections Overview
 https://github.com/ansible-collections/overview
 FAQ: Where did all the modules ...
Upcoming SlideShare
Loading in …5
×

Ansible 2.10 と Collection

株式会社エーピーコミュニケーションズ 社内勉強会「AP Tech Fest」
での発表資料です。

  • Be the first to comment

  • Be the first to like this

Ansible 2.10 と Collection

  1. 1. Ansible 2.10 と Collection 株式会社エーピーコミュニケーションズ 技術開発部 自動化グループ 横地 晃 1 2020/10/07 AP Tech Fest 内部構造が変わった Ansible のおはなし
  2. 2. はじめに  先日、Ansible 2.10.0 がリリースされました。  Collection によるモジュールの配布が本格的となり、 標準モジュール は 70程度に減りました。  Ansible 2.10 と Collection の関係や、ポータビリティなどをご紹介します。 2 2.9 2.10
  3. 3. 自己紹介 3 所属 (株)エーピーコミュニケーションズ 技術開発部 自動化グループ 業務 ネットワーク自動化の支援、各種アウトプット コミュニティ Ansible ユーザー会、JANOG など 共著 寄稿 Ansible 実践ガイド 第3版 Software Design 2018年12月号 他 横地 晃 @akira6592 https://book.impress.co.jp/books/1118101094 https://tekunabe.hatenablog.jp/ てくなべ(ブログ) kindle 版半額! (10/7現在)
  4. 4. 内容  Ansible 2.10 の基本  Ansible 2.10 の導入  Collection の操作  今までの Playbook は動くの?  気になるアップデート  まとめ 4
  5. 5. Ansible 2.10 の基本 標準モジュールが激減 5
  6. 6. Collection の本格運用により標準モジュールが激減  Ansible 2.9 までは 3000 以上あった標準モジュールは 2.10 では約 70 に  他のモジュールは「Collection」による配布に移行  ポータビリティはある程度確保されているため、過度な心配は不要(後述) 6 基本機能 標準モジュール 基本機能 標準モジュール 移行された Collection 群 移行 ※ 標準モジュール: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#module-plugins ※ Ansible Galaxy や Automation Hub では、2.9 での標準モジュールから移行された Collection だけなく、独自のものも管理されている 2.9 2.10 Ansible Galaxy や Automation Hub
  7. 7. 基本機能と標準モジュールは ansible-base に  基本機能と標準モジュールは ansible-base と呼ばれる  「pip install ansible」は ansible-base と 、移行された Collection のセット 7 2.9 ansible-base 2.10 基本機能 標準モジュール 基本機能 標準モジュール ansible 2.10 移行された Collection 群 Ansible Galaxy や Automation Hub ※ ansible-base リリース履歴: 2020/08/14 2.10.0、2020/09/15 2.10.1、2020/10/06 2.10.2 ※ ansible リリース履歴: 2020/09/23 2.10.0
  8. 8. Collection Collection そもそも Collection とは  モジュールやプラグインなどをまとめて配布する単位  Ansible Galaxy や Automation Hub 経由で配布  リポジトリは https://github.com/ansible-collections 配下や独自管理  hoge.fuga のような形式の名前空間が設けられる  含まれるモジュール類は hoge.fuga.piyo という形式(FQCN) 8 例: ansible.netcommon Collection モジュール例 プラグイン例 ansible.necommon.cli_command ansible.necommon.cli_config ansible.necommon.network ansible.necommon.ipaddr ※ FQCN: Fully Qualified Collection Name ※ Collection を取り巻く概要: https://github.com/ansible-collections/overview モジュール プラグイン :
  9. 9. Ansible Galaxy による Collection の配布  例: ansible.netcommon Collection  https://galaxy.ansible.com/ansible/netcommon 9
  10. 10. なんで ansible-base と collection に分かれたの?(私見含む)  ansible 本体と Collection のリリースサイクルを分類  本体の安定性と新機能の取捨選択を両立  「新しいモジュールを使いたいけど ansible のバージョンアップは 影響が大きそうでできない・・」といった悩みがなくなりそう 10 ansible-base 2.10 基本機能 標準モジュール 必要な Collection の インストール・アップデート Collection 群 ※ FQCN: Fully Qualified Collection Name ※ Collection を取り巻く概要: https://github.com/ansible-collections/overview ※ 参考 Collections signal major shift in Ansible ecosystem https://www.jeffgeerling.com/blog/2020/collections-signal-major-shift-ansible-ecosystem
  11. 11. Ansible 2.10 の導入 インストール、アップグレード 11
  12. 12. インストール  ansible-base  ansible 基本機能と標準モジュール  ansible  ansible-base と 移行された Collection のセット 12 pip install ansible-base pip install ansible 基本機能 標準モジュール 移行した Collection 群 今まで通り ※ pip install ansible でインストールした場合、セットの Collection は <python環境>/lib/python3.X/site-packages/ansible_collections/ 配下にインストールされる
  13. 13. アップグレード  ansible 2.9 から ansible 2.10 へのアップグレード  一度アインインストールしてから再インストール  直接アップグレードできないのは ansible 2.10.0 時点の Known Issue 13 pip uninstall ansible pip install ansible venv などで別環境に したほうがよさそう
  14. 14. Collection の操作 インストール、アップグレード、確認 14
  15. 15. これからは Collection を操作する機会が増えそう  ansible のセットの Collection をアップグレードしたい場合  ansible-base をインストールしたあと、標準モジュール以外を利用する場合  など 15
  16. 16. Collection のインストール  Ansible Galaxy や Automation Hub で対象の Collection を見つけてインストール  デフォルトでは ~/.ansible/collections/ansible_collections/ コレクション名/ にインストール  -p オプションや、ansible.cfg の [defaults] 内 collections_path の指定で変更可能 16 ansible-galaxy collection install コレクション名 ※ Installing collections: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#installing-collections インストールコマンド が載っている
  17. 17. Collection のアップグレード  現状、アップグレード専用コマンドがないため、 -f オプション で強制的に最新をインストール 17 ansible-galaxy collection install コレクション名 -f ※ Installing collections: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#installing-collections ポイント
  18. 18. Collection の確認  インストールした Collection をコマンドで確認可能  デフォルトでは ~/.ansible/collections/ansible_collections/ 配下を検索  つまり pip install ansible でセットでインストールされた Collection がある <python環境>/lib/python3.X/site-packages/ansible_collections/ は検索しない。  ansible 2.10.0 時点の Known Issue。明示的に検索先を指定する場合は -p オプションなどを利用する 18 ansible-galaxy collection list ※ Listing collections: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#listing-collections ※ Known Issues: https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.10.html#known-issues (a210) [sakana@centos7 ~]$ ansible-galaxy collection list # /home/sakana/.ansible/collections/ansible_collections Collection Version -------------------- ------- ansible.netcommon 1.1.2 cisco.nxos 1.1.0 netbox.netbox 1.0.0 実行例
  19. 19. 補足1: Ansible Tower で利用する Collection を自動インストールする  プロジェクトの collections/requirements.yml に 必要な Collection 名を指定しておくと自動でインストールされる 19 ※ Collections Support: https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#collections-support ※ requirements.yml の書き方例 https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#install-multiple-collections-with-a-requirements-file --- collections: - ansible.netcommon 例
  20. 20. 補足2: Collection と Red Hat サポートなど  Ansible Supported Collections, Versioning, and Release Strategy  https://access.redhat.com/articles/4993781  Ansible Automation Platform Certified Content  https://access.redhat.com/articles/3642632 20
  21. 21. 今までの Playbook は動くの? 気になるポータビリティ 21
  22. 22. サンプル Playbook(準備)  環境  python 3.6.8、新規 venv に paramiko インストール  pip install ansible でインストール  Playbook  Ansible 2.9 向けに書いた右記のもの 22 --- - hosts: ios gather_facts: false tasks: - name: show ip route ios_command: commands: - show ip route register: resgister_show_ip_route - name: debug route debug: msg: "{{ resgister_show_ip_route.stdout_lines }}" 標準ではなくなったモジュール デモ
  23. 23. サンプル Playbook(実行)  Playbook の修正なしに動いた 23 (a2100) [root@centos7 stumble]# ansible-playbook -i inventory.ini ios_show.yml PLAY [ios] *********************************************************************************** TASK [show ip route] ************************************************************************* ok: [rt01] TASK [debug route] *************************************************************************** ok: [rt01] => { "msg": [ [ "Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP", ...(略)... "C 10.255.255.1/32 is directly connected, Loopback0", "O 10.255.255.2/32 [110/2] via 10.0.0.2, 04:59:05, GigabitEthernet0/3", " 192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks", "C 192.168.1.0/24 is directly connected, GigabitEthernet0/0", "L 192.168.1.11/32 is directly connected, GigabitEthernet0/0" ] ] } PLAY RECAP *********************************************************************************** rt01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 デモ
  24. 24. 動く理由1: Collection がセットだから  「pip install ansible」で、移行された Collection もセットでインストールされる  そのため 2.9 までの標準モジュールが 2.10 でも利用できる  ただし、移行後も開発が進むうえで仕様変更や廃止もあり得る 24 ansible-base 2.10 基本機能 標準モジュール ansible 2.10 移行された collection 群 ※ セットの Collection の定義 (ansible 2.10.0 の例): https://github.com/ansible-community/ansible-build-data/blob/main/2.10/ansible-2.10.0.deps
  25. 25. 動く理由2: リダイレクト機能があるから  コレクション名を含まないモジュール名の指定(例 ios_command)でも cisco.ios.ios_command のような FQCN に解決するリダイレクト機能がある  ansible-base としての機能  もともと標準でなかったモジュールの定義は含まれない 25※ リダイレクトの定義 (ansible-base 2.10.1 の例): https://github.com/ansible/ansible/blob/v2.10.1/lib/ansible/config/ansible_builtin_runtime.yml plugin_routing: # ...(略)... modules: # ...(略)... ios_command: redirect: cisco.ios.ios_command ios_static_route: redirect: cisco.ios.ios_static_route # ...(略)... 単に ios_command と指定すれば cisco.ios.ios_command と 解釈してくれる
  26. 26. とはいえ Porting Guide はいつも通り要チェック  バージョンごとに移行時の注意点などが記載されている  Ansible-base 2.10 Porting Guide  https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_base_2.10.html  Ansible 2.10 Porting Guide  https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.10.html 26
  27. 27. タスクごとの FQCN 指定が推奨 27 引用元: What's new with Ansible Content Collections https://www.ansible.com/resources/webinars-training/whats-new-with-ansible-content-collections-webinar FQCN
  28. 28. 気になるアップデート CHANGELOG などから地味に便利、ちょっと注意なアップデートを抜粋 28
  29. 29. 地味に便利  タスクのタイムアウトが設定可能に  接続時間+処理時間のタイムアウトを指定、デフォルトは0(タイムアウトなし)  https://docs.ansible.com/ansible/latest/reference_appendices/config.html#task-timeout  ディレクトリやパスの結合に便利な path_join フィルター追加  python の os.path.join 相当、ディレクトリ名の後の / ありなしを気にしなくていい  https://tekunabe.hatenablog.jp/entry/2020/09/17/ansible_path_join  regexp_replace フィルターがマルチラインサポート  https://github.com/ansible/ansible/issues/61985  map や selectattr などのあとの | list が不要に  https://github.com/ansible/ansible/pull/68014 29※ ansible-base としての changelog: https://github.com/ansible/ansible/blob/stable-2.10/changelogs/CHANGELOG-v2.10.rst
  30. 30. ちょっと注意  CONDITIONAL_BARE_VARS のデフォルトが False に変更  assert モジュールや when で 変数名のみを指定してる場合は注意  2.9で [DEPRECATION WARNING]: evaluating 'hogevar' as a bare variable のような警告があったら特に  True/False が反転することも  https://twitter.com/akira6592/status/1294869956891275265  https://docs.ansible.com/ansible/latest/reference_appendices/config.html#conditional-bare-vars  hash_behaviour が Deprecated 扱い  代わりに combine フィルターを利用  https://docs.ansible.com/ansible/devel/reference_appendices/config.html#default-hash- behaviour 30※ ansible-base としての changelog: https://github.com/ansible/ansible/blob/stable-2.10/changelogs/CHANGELOG-v2.10.rst
  31. 31. まとめ 31
  32. 32. まとめ  ansible 2.10 から Collection の本格運用が開始  ansible-base = 基本機能 + 標準モジュール  ansible = ansible-base + 移行された Collection  Collection 移行に伴う影響は、過度に心配する必要はなさそう  Collection のインストールセットやリダイレクトによりポータビリティは確保  ゆくゆくは FQCN 表記にするのがよさそう  その他の機能追加も多々 32
  33. 33. 参考  公式  Ansible Collections Overview  https://github.com/ansible-collections/overview  FAQ: Where did all the modules go?  https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#where-did-all-the-modules-go  changelog  https://github.com/ansible/ansible/blob/stable-2.10/changelogs/CHANGELOG-v2.10.rst  Ansible-base 2.10 Porting Guide  https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_base_2.10.html  Ansible 2.10 Porting Guide  https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.10.html  個人ブログ  [Ansible] モジュールの指定などを FQCN 表記に移行する手順  https://tekunabe.hatenablog.jp/entry/2020/09/19/ansible_fqcn  [Ansible] role 単位で collections を指定する  https://tekunabe.hatenablog.jp/entry/2020/09/20/ansible_role_collections 33

×