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. www.goodpello.com
    Ansible VMwareモジュール
    の今までとこれから
    VMware DevOps Meetup #5

    View Slide

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

    View Slide

  3. 自己紹介
    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モジュール開発
    ナナチスキ

    View Slide

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

    View Slide

  5. Ansibleと
    Collectionsについて

    View Slide

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

    View Slide

  7. 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
    一つのタスク
    モジュールに決められた
    パラメーターを渡す
    モジュール

    View Slide

  8. 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
    ベース以外は分離

    View Slide

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

    View Slide

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

    View Slide

  11. 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例

    View Slide

  12. 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パッケージの仕様は未定

    View Slide

  13. VMware Collections

    View Slide

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

    View Slide

  15. 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

    View Slide

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

    View Slide

  17. 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

    View Slide

  18. 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を使う場合は別途インストールする必要あり

    View Slide

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

    View Slide

  20. 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

    View Slide

  21. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 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
    ▸ インストール先指定

    View Slide

  26. 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が無いと動かない

    View Slide

  27. 必要なライブラリインストール
    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で必要なライブラリインストール

    View Slide

  28. 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の例

    View Slide

  29. Ansible 2.9から2.10へ

    View Slide

  30. 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

    View Slide

  31. 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

    View Slide

  32. VMware Collections
    に困ったら

    View Slide

  33. 困ったら
    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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. 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

    View Slide