Slide 1

Slide 1 text

www.goodpello.com Ansible VMwareモジュール の今までとこれから VMware DevOps Meetup #5

Slide 2

Slide 2 text

今日話す事 01. AnsibleとCollectionsについて 02. VMware Collections 03. VMware Collectionsインストール・使用方法 04. Ansible 2.9から2.10へ 05. VMware Collectionsに困ったら

Slide 3

Slide 3 text

自己紹介 3 --- - 名前: 大嶋 健容 Twitter: @sky_jokerxx GitHub: sky-joker 所属: Red Hat k.k. 仕事: コンサルタント コントリビュート: ansible: collaborator: - VMware - Zabbix 浸かってる沼: - 小型PCクラスタ構築 @sky_jokerxx 得意: - ansible - VMware(vSphere, NSX) - vSphere/NSX APIを使った開発 - OSSとVMwareの組み合わせ 興味: - 自動化 - コンテナ(k8s, OpenShift) - CICD 趣味: - 自宅ラックで検証 - Ansibleモジュール開発 ナナチスキ

Slide 4

Slide 4 text

4 注意事項 ▸ 今日話す事の中には、現在開発中の内容も含まれるため将来的 に仕様が変更される点についてはご了承ください

Slide 5

Slide 5 text

Ansibleと Collectionsについて

Slide 6

Slide 6 text

6 Ansibleとは SIMPLE POWERFUL AGENTLESS ▸ Infrastructure as Codeを実現するOSSツールの一つです ▸ Ansibleを使う事でインフラのプロビジョニング、構成管理、デプロイメント などが自動化できます ▸ Ansibleは以下の3つの特徴があります 標準化された自動化言語 幅広く対応 セキュア

Slide 7

Slide 7 text

YAML(Playbook)例 7 - name: "Example Playbook" hosts: localhost gather_facts: no tasks: - name: "Clone VM from template" vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no datacenter: "{{ datacenter }}" esxi_hostname: "{{ esxi_hostname }}" folder: "{{ folder }}" template: "{{ template }}" name: "{{ name }}" customization: "{{ customization }}" wait_for_customization: yes state: poweredon 一つのタスク モジュールに決められた パラメーターを渡す モジュール

Slide 8

Slide 8 text

8 Collectionsとは モジュールやプラグインが別管理に! ▸ Ansible 2.9までは、3000以上のモジュールやプラグインが1つのパ ッケージで管理されていましたが、2.10以降からはモジュールや プラグインの管理方法が次のように変わります l Ansible-base ・ Ansible本体とベースとなるモジュールやプラグインが 含まれるパッケージ l Collections ・ 上記以外のモジュールやプラグインのパッケージ ▸ Ansible 2.8: Tech preview ▸ Ansible 2.9: Full Supported サポートバージョン zabbix aws junos ansible-base Collections ベース以外は分離

Slide 9

Slide 9 text

9 Collectionsの背景 Ansible 2.9までの課題 ▸ リリース l 各モジュールはアップストリームのリリースサイクルに合わせる必要があるため、新しいモジ ュールやバグFixの反映に時間がかかってました ・ Ansibleメジャーバージョンは約半年サイクルでアップされているため、新モジュールを使いた い場合は最大半年待つ必要がありました ▸ 管理 l モジュール数が多いため、issuesやPull Requestの管理が煩雑でした ▸ テスト l アップストリームが準備したCI(Shippable)を利用する必要があり、全モジュールに最適化され ているわけではないので部分的なテストしか出来ないケースが出てきました ・ モジュールによってはマージに時間がかかっていました

Slide 10

Slide 10 text

Collectionsのメリット 10 Collectionsのメリット1 ▸ リリース l Collection毎にリポジトリが分けられたため、それぞれのタイミングでリリース可能になりました ▸ 管理 l Collectionのリポジトリ内で一元管理できるようになりました ▸ テスト l 独自のCIが実装できるようになったため、Collection用に最適化されたテストが実行できるようになり ました ▸ Collection選択の自由度 l 利用者はCollection(バージョン含)を取捨選択できるようになりました 各Collection開発チームが裁量を持てることになったことによって柔軟に対応可能になり、 利用者も開発者もハッピーに!

Slide 11

Slide 11 text

Collectionsのメリット 11 Collectionsのメリット2 ▸ Namespace l Namespaceで各Collectionを管理出来るようになりました 仮に同じモジュール名があったとしてもNamespaceを分ければ衝 突せず別のモジュールとして使えます ▸ Full Qualified Collection Name(FQCN) l FQCNを使うことで、モジュールなど厳密に指定できます ▸ Roleを含めたワンパッケージ化 l 今までは、モジュールやRoleは非同期で開発されていましたが、 CollectionではRoleも含められるようになったため同期開発が出来 るようになりました これで、モジュールやプラグイン、Roleなどがワンパッケージで 提供可能になりました {Namespace}.{Collection}.{module,roleなど} FQCN community.vmware.vmware_guest VMware CollectionのFQCN例

Slide 12

Slide 12 text

Ansible 2.10リリース情報 12 •Schedule for the ansible (as opposed to ansible-base) 2.10 release: https://groups.google.com/g/ansible-devel/c/srweNQ92pJw ▸ Ansible 2.10 base l リリース: 2020/08/13 l Ansible本体およびベースのモジュールやプラグインのみが対象 ▸ Ansible 2.10 GA l リリース: 2020/09/22 l Ansible 2.9で使えていたモジュール/プラグインなどのCollections同梱版 l Ansible バージョン毎でインストールされるCollectionsの対象とバージョン情報 https://github.com/ansible-community/ansible-build-data ▸ 現在、上記2つのrpmパッケージの仕様は未定

Slide 13

Slide 13 text

VMware Collections

Slide 14

Slide 14 text

VMware Collectionは2つ! 14 • vmware • vmware_rest NEW(開発中)

Slide 15

Slide 15 text

VMware Collection 15 ▸ VMware Collection l https://github.com/ansible-collections/vmware ▸ 従来通り! l 今までAnsibleで使っていたSOAPモジュール! ▸ モジュール数 l 170モジュール ▸ 動作に必要なPythonライブラリ l pyvmomi >= 6.7.1.2018.12 l vSphere Automation SDK for Python

Slide 16

Slide 16 text

VMware Collectionの課題 16 ▸ 標準化 l 以前は設計の標準が無くスクラッチで作っていたため作成済みのモジュールを 参考に各々が作っていた(今は簡単な規約あり: https://is.gd/jPktTM) ▸ 処理が複雑 l 一つのモジュールで複数の機能を持つ仕組みで作ってるので処理が複雑になり がち(vmware_guestとかが良い例で3,500行程あってメンテも大変)

Slide 17

Slide 17 text

VMware REST Collection 17 ▸ VMware REST Collection l https://github.com/ansible-collections/vmware_rest ▸ 新登場! l vCenter 6.5から実装されたREST APIを元に作られたモジュールです l REST APIの仕様を元に自動でモジュールが生成されるようになりました https://github.com/ansible-collections/vmware_rest_code_generator l コードもシンプル化且つ高速化が図られています ▸ モジュール数 l 348モジュール ▸ 動作に必要なPythonライブラリおよびバージョン l aiohttp l Python 3

Slide 18

Slide 18 text

VMware RESTの高速化 18 try: from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( AnsibleTurboModule as AnsibleModule, ) except ImportError: from ansible.module_utils.basic import AnsibleModule ▸ cloud.common l https://github.com/ansible-collections/cloud.common 現状では、AnsibleTurboModuleを使う場合は別途インストールする必要あり

Slide 19

Slide 19 text

高速比較結果 19 項目 時間 real 0m32.235s user 0m20.646s sys 0m2.776s 項目 時間 real 0m23.624s user 0m21.241s sys 0m3.681s ▸ vcenter_datacenter_infoモジュールを30回繰り返し実行した比較 高速化無効 高速化有効

Slide 20

Slide 20 text

VMware Collections サポート情報 20 ▸ vmware l CI環境 l Zuul + vSphere 6.7.0 l 基本的にはpyvmomi(>=6.7.1.2018.12)がサポートしている範囲が対象 https://github.com/vmware/pyvmomi ▸ vmwre_rest l CI環境 l Zuul + vSphere 7.0.0

Slide 21

Slide 21 text

VMware Collections 使用する際の注意点(1) 21 ▸ ESXi 無償版では使えません l VMwareモジュールはESXi単体でも限定的ですが操作することができ ます l ただし、ESXi無償版の場合はAPIがリードオンリーになってしまうた め使えません(60日間評価の場合は可能) l 個人で検証する場合は VMUG Advantage を購入することで可能です VMUG Advantageは$200/年で検証ライセンスが入手できます https://community.vmug.com/vmug2019/membership/evalexperience

Slide 22

Slide 22 text

VMware Collections 使用する際の注意点(2) 22 ▸ vmware_restはvmwreを置き換えるものではないです l 現状、REST APIでカバーされている範囲はSOAPより少ないです l そのため、現時点では置き換えるものではありません l 適材適所で使い分けていくものになっています

Slide 23

Slide 23 text

VMware Collections インストール・使用方法

Slide 24

Slide 24 text

VMware Collectionsの入手先 24 ▸ VMware CollectionsはGalaxyから入手可能です https://galaxy.ansible.com/search?deprecated=false&keywords=vmware&or der_by=-relevance&page=1

Slide 25

Slide 25 text

VMware Collectionインストール 25 $ ansible-galaxy collection install community.vmware $ ansible-galaxy collection install community.vmware:1.0.0 # バージョンを指定する場合 $ ls ~/.ansible/collections/ansible_collections/community/ # インストール先 vmware ▸ インストール $ ansible-galaxy collection install community.vmware -p collections # -pオプションを追加 $ ls collections/ansible_collections/community/ # 作業ディレクトリのインストール先 vmware ▸ インストール先指定

Slide 26

Slide 26 text

VMware REST Collectionインストール 26 $ git clone https://github.com/ansible-collections/vmware_rest.git collections/ansible_collections/vmware/vmware_rest $ git clone https://github.com/ansible-collections/cloud.common.git collections/ansible_collections/cloud/common ▸ インストール(作業用ディレクトリにインストールする例) ※注意 ※ vmware_restは開発中のためリポジトリにあるREADME手順通りではインストール出 来ません! ▸ Namespaceはcommunityへ変更される可能性あり https://github.com/ansible-collections/vmware_rest/issues/18 ▸ 現状はcloud.commonが無いと動かない

Slide 27

Slide 27 text

必要なライブラリインストール 27 $ pip install -r $COLLECTIONS_PATH/vmware/vmware_rest/requirements.txt ▸ vmware_restで必要なライブラリインストール 現時点ではAnsible 2.9がインストールされてしまいます もし、Ansible 2.10を使う場合は次のように別々でインストールします $ pip install ansible==2.10a8 # まだ、正式リリースしてないため、ここでは2.10a8を指定 $ ansible install aiohttp $ pip install pyvmomi ▸ vmwareで必要なライブラリインストール

Slide 28

Slide 28 text

VMware Collections Playbook 28 モジュール名にFQCNを使用する場合 モジュール名のFQCNを省略する場合 --- - name: "Example Playbook" hosts: localhost gather_facts: false tasks: - name: "Gather info for datacenters" community.vmware.vmware_datacenter_info: #FQCN hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: false register: gatehr_info_datacenters - debug: var=gatehr_info_datacenters --- - name: "Example Playbook" hosts: localhost gather_facts: false collections: # collectionsディレクティブを使用 - vmware.vmware_rest tasks: - name: "Gather info for datacenters" vcenter_datacenter_info: vcenter_hostname: "{{ vcenter_hostname }}" vcenter_username: "{{ vcenter_username }}" vcenter_password: "{{ vcenter_password }}" validate_certs: false register: gatehr_info_datacenters - debug: var=gatehr_info_datacenters vmwareの例 vmware_restの例

Slide 29

Slide 29 text

Ansible 2.9から2.10へ

Slide 30

Slide 30 text

Ansible 2.9から2.10への移行 30 ▸ Ansible 2.9にあったモジュールは、Ansible 2.10 GAをインストールすることで自動的に関 連するCollectionsがインストールされます ▸ Ansible 2.10(Ansible Base含む)から ansible_builtin_runtime が導入されました ansible_builtin_runtimeでは、モジュールなどのリダイレクト先が定義されており自動で Collectionsへのルーティングがされます そのため、定義されているモジュールなどはFQCNを省略して今まで通りのPlaybookの書 き方で使用可能です ▸ ただし、今後出てくるCollectionsの中には別のCollectionとモジュール名が重複したり、 全てのCollectionsがansible_builtin_runtimeに定義されるわけではないため、将来的には FQCNを使った書き方が推奨されます 各モジュールなどの細かな差分についてはAnsible 2.10 Porting Guideを確認ください •ansible_builtin_runtime: https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml •collection routing: https://github.com/ansible/ansible/pull/67684 •Ansible 2.10 Porting Guide: https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_2.10.html

Slide 31

Slide 31 text

ansible_builtin_runtimeの一部 31 # Copyright (c) 2020 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) plugin_routing: connection: # collectionプラグインのリダイレクト定義 (snip) netconf: redirect: ansible.netcommon.netconf (snip) modules: # modulesのリダイレクト定義 vmware_guest: redirect: community.vmware.vmware_guest vmware_guest_boot_info: redirect: community.vmware.vmware_guest_boot_info (snip) filter: # filterプラグインのリダイレクト定義 (snip) ipaddr: redirect: ansible.netcommon.ipaddr (snip) lookup: # lookupプラグインのリダイレクト定義 (snip) dig: redirect: community.general.dig

Slide 32

Slide 32 text

VMware Collections に困ったら

Slide 33

Slide 33 text

困ったら 33 ▸ teratail l https://teratail.com/tags/Ansible ▸ Slack(ansiblejp) l https://bit.ly/ansiblejp-slack ▸ vmware/vmware_restプロジェクトのissues l https://github.com/ansible-collections/vmware/issues l https://github.com/ansible-collections/vmware_rest/issues

Slide 34

Slide 34 text

ansiblejpのSlackにvmwareあります 34 1000人突破!! 募集!!

Slide 35

Slide 35 text

Ansibleユーザー会 35 https://ansible-users.connpass.com/

Slide 36

Slide 36 text

36 まとめ vmware/vmware_restを提供 ▸ Collectionsからvmware_restが追加され高速化チューニングも実装! ▸ SOAPとRESTの二刀流をサポート! ▸ vmwareとvmware_restは共存関係(データ取得はvmware_restがいいかも) ▸ vmware collectioはpyvmomiバージョンが明確に! WN X BSF WN XBSF@SFTU AnsibleでVMware環境を操作する場合はライセンスが必要 ▸ 個人で検証したい場合はVMUG Advantegeの検討を! FQCNの省略はできますが推奨はFQCNを使う ▸ ansible_builtin_runtimのおかげで省略できますが将来モジュール名が被る 物が出てくる可能も ansiblejpのvmwareチャンネルでメンバー募集中!

Slide 37

Slide 37 text

Thank you For listening https://twitter.com/sky_jokerxx https://qiita.com/sky_jokerxx https://sky-joker.tech https://github.com/sky-joker @sky_jokerxx