運用でESXiのホストのバージョンやビルド番号、パッチ番号を本番環境から取得したい時があったりします。
ホストが多いと流石に手動で確認するのは辛いのでPowershellなどでツールを作ってcsvやExcelにまとめたりする自動ツールを作る人が多いのかなと思います。
最新版の vmware_host_facts
では、その情報も取得できるパッチをマージしてもらっていて、使えるのがAnsible 2.10からだと思っていたのですが、おそらくVMwareのCollectionsが出てから使えるようになりそうです。
そこでここでは、一先ず devel
のAnsibleを使ってVMware ESXiのプロダクト、バージョン、ビルド番号、パッチ番号を取得する方法について紹介します。
環境
項目 | バージョン |
---|---|
CentOS | 7.5.1804 |
Python | 3.6.8 |
Ansible | 2.10.0.dev0 |
Ansibleインストール
develリポジトリをクローンしてAnsibleをインストールします。
1 2 |
[root@localhost 01]# git clone https://github.com/ansible/ansible |
venvを作成して環境を構築します。
1 2 3 4 5 6 7 8 9 10 11 |
[root@localhost 01]# cd ansible/ [root@localhost ansible]# python3 -m venv venv [root@localhost ansible]# . venv/bin/activate (venv) [root@localhost ansible]# pip install -r requirements.txt pyvmomi (venv) [root@localhost ansible]# . hacking/env-setup (venv) [root@localhost ansible]# ansible --version [WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point. ansible 2.10.0.dev0 (snip) |
これで準備が整いました。
Playbook作成
以下のPlaybookを作成します。
1 2 |
(venv) [root@localhost 01]# vi example.yml |
vars
の値は変更してください。
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
--- - name: example playbook hosts: localhost gather_facts: no vars: vcenter_hostname: vcenter name vcenter_user: administrator@vsphere.local vcenter_pass: password esxi_hostname: esxi-hostname tasks: - name: Gather product version info for ESXi from vCenter vmware_host_facts: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: no esxi_hostname: "{{ esxi_hostname }}" schema: vsphere properties: - config.product - config.option register: gather_host_facts_result - name: Extract update level info from option properties set_fact: update_level_info: "{{ item.value }}" loop: "{{ gather_host_facts_result.ansible_facts.config.option }}" when: - item.key == 'Misc.HostAgentUpdateLevel' - name: The output of Product, Version, Build, Update info for ESXi debug: msg: - "ESXi : {{ esxi_hostname }}" - "Product : {{ gather_host_facts_result.ansible_facts.config.product.name }}" - "Version : {{ gather_host_facts_result.ansible_facts.config.product.version }}" - "Build : {{ gather_host_facts_result.ansible_facts.config.product.build }}" - "Update : {{ update_level_info }}" |
新しい vmware_host_facts
では schema
と properties
パラメーターが追加されています。
このパラメーターを使う事でESXiオブジェクトの任意のプロパティを取得できます。
ここではconfigデータオブジェクトの product と option を取得します。
productのオブジェクトにはプロダクト、バージョン、ビルド番号が含まれています。
パッチ番号はoptionにありますが、optionはリストになっているので対象のキー(Misc.HostAgentUpdateLevel
)の情報を取得するためループで回します。
そして、最後に情報をdebugで出力してみます。
Playbook実行
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 25 26 27 |
(venv) [root@localhost 01]# ANSIBLE_DISPLAY_SKIPPED_HOSTS=False ansible-playbook example.yml [WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point. [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [example playbook] ******************************************************************************************************************************************************** TASK [Gather product version info for ESXi from vCenter] *********************************************************************************************************************** ok: [localhost] TASK [Extract update level info from option properties] ************************************************************************************************************************ ok: [localhost] => (item={'_vimtype': 'vim.option.OptionValue', 'key': 'Misc.HostAgentUpdateLevel', 'value': '0'}) TASK [The output of Product, Version, Build, Update info for ESXi] ************************************************************************************************************* ok: [localhost] => { "msg": [ "ESXi : esxi-08.local", "Product : VMware ESXi", "Version : 6.7.0", "Build : 8169922", "Update : 0" ] } PLAY RECAP ********************************************************************************************************************************************************************* localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
こんな感じで情報を自動で取得できます 🙂
Jinja2でレポート用テンプレートを作っておけば自動で棚卸とかもできそうですね。
(ちなみにやり方はvmware_host_factsモジュールのEXAMPLEの方にも書いたりしています)