AnsibleでWindows管理

AnsibleでAzure上のWindows管理

最近、お仕事でAnsibleを使う機会が増えてきました。というか、自分が好んで使っているだけですが…

ネット上で情報収集するも、管理対象がLinux系が多く、なかなかWindows系が出てこないので、自分の忘備録もかねて。

Azure上のリソースを払い出し

これはネットや書籍にサンプルが載っているものがありましたが、流れと利用モジュールは以下になるかと思います。

  1. リソースグループ作成
    • azure_rm_resourcegroup
  2. 仮想ネットワーク作成
    • azure_rm_virtualnetwork
  3. セキュリティグループ作成
    • azure_rm_securitygroup
  4. サブネット作成
    • azure_rm_subnet
  5. パブリックIP作成
    • azure_rm_publicipaddress
  6. ネットワークインターフェース作成
    • azure_rm_networkinterface
  7. VM作成
    • azure_rm_virtualmachine
    • azure_rm_virtualmachineextension

最後のVM作成は azure_rm_virtualmachine だけで作成はされますが、WinRM設定を実施するため azure_rm_virtualmachineextension を利用しています。

以下、こんな感じで使ってますよの例です。

---
- name: Create virtual machine
  azure_rm_virtualmachine:
    resource_group: "{{ rg_name }}"
    name: "{{ item.name }}"
    admin_username: "{{ item.username }}"
    admin_password: "{{ item.password }}"
    vm_size: "{{ item.vm_size }}"
    os_type: "{{ item.os_type }}"
    network_interfaces: "{{ item.name }}-nic"
    image:
      offer: "{{ item.image_offer }}"
      publisher: "{{ item.image_publisher }}"
      sku: "{{ item.image_sku }}"
      version: "{{ item.image_version }}"
  loop: "{{ azure_vms }}"

- name: Create VM script extension to enable HTTPS WinRM listener
  azure_rm_virtualmachineextension:
    name: "{{ item.name }}-extension"
    resource_group: "{{ rg_name }}"
    virtual_machine_name: "{{ item.name }}"
    publisher: Microsoft.Compute
    virtual_machine_extension_type: CustomScriptExtension
    type_handler_version: '1.9'
    settings: '{"fileUris": ["https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"],"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File ConfigureRemotingForAnsible.ps1"}'
    auto_upgrade_minor_version: true
  loop: "{{ azure_vms }}"
...

azure_rm_virtualmachineextension のなかで CustomScriptExtension を使用し、公式のWinRM設定スクリプトを実行しています。

ただし、ここにも記載があるとおり、基本認証が設定されるため、トレーニングや開発での使用としてください。

これで払い出された仮想マシンに対して win_*** なモジュールが利用できる状態となります。