Ansible2.1がARMに対応したので"少しだけ"試してみた

Ansible2.1が発表された記事がFacebookに流れてきたので、何気に眺めていたらARM(Azure Resource Manager)のサポートが追加されたらしいので少し試してみた。

Broader support for Microsoft Azure, expanding Ansible’s support for hybrid cloud deployments, including the ability to take advantage of Azure’s Resource Manager functionality.

www.redhat.com

お試しの前に...

実務でAnsibleを使っている場合(特に1.x系)、影響が出てしまうと困るので以下などを参考にpyenv/pyenv-virtualenvを入れて環境を切り替えられるようにしてから試すほうがいいでしょう。

qiita.com

Azure Python SDKのインストール

pyenv環境にazure SDKを入れて試したところ以下のようなエラーが出て、SDKを認識できませんでした。

fatal: [ansible.decr.jp]: FAILED! => {"changed": false, "failed": true, "msg": "The Azure Python SDK is not installed (try 'pip install azure') - No module named enum"}

試しに global の方に入れてみたところ認識されました。*1

$ sudo pip install azure==2.0.0rc2

ちなみに、最新のSDKは2.0.0rc4だったのでこちらで試したところ以下のようなエラーで動作しませんでした。

fatal: [ansible.decr.jp]: FAILED! => {"changed": false, "failed": true, "msg": "Expecting azure.mgmt.compute.__version__ to be >= 2016-03-30. Found version Do you have Azure >= 2.0.0rc2 installed?"}

この辺りはまだ出たばかりなので、今後の改善を期待したいですね。

Ansibleのインストール

Ansible本体をインストールします

$ pip install ansible

サービスプリンシパル認証のための設定

以下の2のあたりを参考にclient_id/secret/tenant_idなどを取得する

qiita.com

Ansibleの設定を書く

  • hosts/hosts

Asure関連の処理はlocalで動作するのでhostsはこんな感じで適当に...

[ansibletest]
ansibletest.example.com
  • roles/azure/tasks/main.yml

<サブスクリプションID>などの設定は各自の環境に合わせて修正してください。*2

- name: Create a resource group
  azure_rm_resourcegroup:
    name: Testing
    location: japanwest
    state: present
    subscription_id: <サブスクリプションID>
    client_id: <クライアントID>
    secret: <secret>
    tenant: <テナントID>
    tags:
      testing: testing
      delete: never
  • azuretest.yml
---
- name: ansible test
  hosts: ansibletest
  connection: local

  roles:
    - azure

playbookを実行する

$ ansible-playbook -i hosts/hosts default.yml

PLAY [ansible test] ************************************************************

TASK [setup] *******************************************************************
ok: [ansibletest.example.com]

TASK [azure : include] *********************************************************
included: /Users/kaz/dev/ansible21/roles/azure/tasks/resource-group.yml for ansibletest.example.com

TASK [azure : Create a resource group] *****************************************
ok: [ansibletest.example.com]

PLAY RECAP *********************************************************************
ansibletest.example.com : ok=3 changed=0 unreachable=0 failed=0


問題なく実行されると、portal上でもリソースグループが追加されました。


f:id:kaz_29:20160531065723j:plain

まとめ

今回はリソースグループを作ってみただけですが、業務に適用できるか引き続き色々試してみようと思います。
TerraformもARM対応したりと色々面白くなってきましたね(^^。

*1:python力足らないんで原因わからないですが、引き続き調査。

*2:ドキュメントには、subscription_idなどの情報を環境変数や、~/.azure/credentialsに設定できると書いてあるのですがうまくいかなかったのでこの辺りも引き続き調査。