Ansibleのモジュールを使ってVMware基盤のデータストアを操作してみたいと思います。
環境
項目 | バージョン |
---|---|
Python | 3.6.8 |
Ansible | 2.9.9 |
Playbook変数
ここで使用する変数配下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 |
- name: example playbook (snip) vars: vcenter_hostname: vcenter04.local vcenter_username: administrator@vsphere.local vcenter_password: secret directory_path: /example file_name: example.txt.gz datacenter: DC datastore: VM (snip) |
変数名 | 説明 |
---|---|
vcenter_hostname | vCenterへアクセスするためのホスト名またはIPアドレス |
vcenter_username | vCenterへログインするユーザー名 |
vcenter_password | vCenterユーザーのパスワード |
directory_path | データストアのディレクトリパス |
file_name | 対象のファイル名 |
datacenter | 対象のデータセンター名 |
datastore | 対象のデータストア名 |
ファイルアップロード
ファイルアップロードは vsphere_copy モジュールを使うこと出可能です。
以下のようにPlaybookを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
--- - name: example playbook hosts: localhost gather_facts: no vars: vcenter_hostname: vcenter04.local vcenter_username: administrator@vsphere.local vcenter_password: secret directory_path: /example file_name: example.txt.gz datacenter: DC datastore: VM tasks: - name: Copy a file to datastore vsphere_copy: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no datacenter: "{{ datacenter }}" datastore: "{{ datastore }}" path: "{{ directory_path }}/{{ file_name }}" src: "{{ file_name }}" |
これを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 |
(venv) [root@localhost datastore]# ansible-playbook main.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [example playbook] ************************************************************************************************************************************************************ TASK [Copy a file to datastore] **************************************************************************************************************************************************** changed: [localhost] PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
ファイルが対象のディレクトリに保存されているか確認してみます。
ファイルダウンロード
データストアからファイルをダウンロードしてみます。
ダウンロードするモジュールは現状無いので uri モジュールを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--- - name: example playbook hosts: localhost gather_facts: no vars: vcenter_hostname: vcenter04.local vcenter_username: administrator@vsphere.local vcenter_password: secret directory_path: /example file_name: example.txt.gz datacenter: DC datastore: VM tasks: - name: Fetch a file from datastore uri: url: "https://{{ vcenter_hostname }}/folder{{ directory_path }}/{{ file_name }}?dcPath={{ datacenter }}&dsName={{ datastore }}" user: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no method: "get" dest: ./download_file.txt.gz |
dest
に保存するファイル名を指定します。
これを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 |
(venv) [root@localhost datastore]# ansible-playbook main.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [example playbook] ************************************************************************************************************************************************************ TASK [Fetch a file from datastore] ************************************************************************************************************************************************* changed: [localhost] PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
ファイルがダウンロードできたか確認してみます。
1 2 3 |
(venv) [root@localhost datastore]# ls download_file.txt.gz example.txt.gz main.yml |
ファイル削除
データストアのファイルを削除してみます。
削除するモジュールも現状無いのでダウンロードと同じくuriモジュールを使用します。
uriモジュールの method
を delete
にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
--- - name: example playbook hosts: localhost gather_facts: no vars: vcenter_hostname: vcenter04.local vcenter_username: administrator@vsphere.local vcenter_password: secret directory_path: /example file_name: example.txt.gz datacenter: DC datastore: VM tasks: - name: Delete a file from datastore uri: url: "https://{{ vcenter_hostname }}/folder{{ directory_path }}/{{ file_name }}?dcPath={{ datacenter }}&dsName={{ datastore }}" user: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no method: "delete" status_code: 204 register: result changed_when: - result.status == 204 |
これを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 |
(venv) [root@localhost datastore]# ansible-playbook main.yml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [example playbook] ************************************************************************************************************************************************************ TASK [Delete a file from datastore] ************************************************************************************************************************************************ changed: [localhost] PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
ファイルが削除された確認してみます。
現状は、ファイルの操作までなら既存のモジュールで対応可能です 🙂
もし、vCenterではなくESXiを指定する場合は datacenter
を ha-datacenter
を指定してください。