Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ansible VMwareモジュールの今までとこれから

sky_joker
August 25, 2020

Ansible VMwareモジュールの今までとこれから

sky_joker

August 25, 2020
Tweet

More Decks by sky_joker

Other Decks in Technology

Transcript

  1. 自己紹介 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モジュール開発 ナナチスキ
  2. 6 Ansibleとは SIMPLE POWERFUL AGENTLESS ▸ Infrastructure as Codeを実現するOSSツールの一つです ▸

    Ansibleを使う事でインフラのプロビジョニング、構成管理、デプロイメント などが自動化できます ▸ Ansibleは以下の3つの特徴があります 標準化された自動化言語 幅広く対応 セキュア
  3. 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 一つのタスク モジュールに決められた パラメーターを渡す モジュール
  4. 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 ベース以外は分離
  5. 9 Collectionsの背景 Ansible 2.9までの課題 ▸ リリース l 各モジュールはアップストリームのリリースサイクルに合わせる必要があるため、新しいモジ ュールやバグFixの反映に時間がかかってました ・

    Ansibleメジャーバージョンは約半年サイクルでアップされているため、新モジュールを使いた い場合は最大半年待つ必要がありました ▸ 管理 l モジュール数が多いため、issuesやPull Requestの管理が煩雑でした ▸ テスト l アップストリームが準備したCI(Shippable)を利用する必要があり、全モジュールに最適化され ているわけではないので部分的なテストしか出来ないケースが出てきました ・ モジュールによってはマージに時間がかかっていました
  6. Collectionsのメリット 10 Collectionsのメリット1 ▸ リリース l Collection毎にリポジトリが分けられたため、それぞれのタイミングでリリース可能になりました ▸ 管理 l

    Collectionのリポジトリ内で一元管理できるようになりました ▸ テスト l 独自のCIが実装できるようになったため、Collection用に最適化されたテストが実行できるようになり ました ▸ Collection選択の自由度 l 利用者はCollection(バージョン含)を取捨選択できるようになりました 各Collection開発チームが裁量を持てることになったことによって柔軟に対応可能になり、 利用者も開発者もハッピーに!
  7. 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例
  8. 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パッケージの仕様は未定
  9. 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
  10. VMware Collectionの課題 16 ▸ 標準化 l 以前は設計の標準が無くスクラッチで作っていたため作成済みのモジュールを 参考に各々が作っていた(今は簡単な規約あり: https://is.gd/jPktTM) ▸

    処理が複雑 l 一つのモジュールで複数の機能を持つ仕組みで作ってるので処理が複雑になり がち(vmware_guestとかが良い例で3,500行程あってメンテも大変)
  11. 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
  12. 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を使う場合は別途インストールする必要あり
  13. 高速比較結果 19 項目 時間 real 0m32.235s user 0m20.646s sys 0m2.776s

    項目 時間 real 0m23.624s user 0m21.241s sys 0m3.681s ▸ vcenter_datacenter_infoモジュールを30回繰り返し実行した比較 高速化無効 高速化有効
  14. 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
  15. 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
  16. VMware Collections 使用する際の注意点(2) 22 ▸ vmware_restはvmwreを置き換えるものではないです l 現状、REST APIでカバーされている範囲はSOAPより少ないです l

    そのため、現時点では置き換えるものではありません l 適材適所で使い分けていくものになっています
  17. 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 ▸ インストール先指定
  18. 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が無いと動かない
  19. 必要なライブラリインストール 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で必要なライブラリインストール
  20. 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の例
  21. 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
  22. 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
  23. 困ったら 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
  24. 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チャンネルでメンバー募集中!