Ansibleのfactを使ってシステム変数を取得する
Ansibleのfactsを使って、システム変数を色々と取得してみたのでその備忘録です!
公式ドキュメント
playbookで
gather_facts: yes
に設定する
- hosts: role_bastion user: ubuntu become_method: sudo gather_facts: yes roles: - verifi
- tasks/main.yml
--- - name: echo environment debug: var: "{{ item }}" with_items: - "{{ env }}" - name: print ansible variables debug: var: '{{ item }}' with_items: - inventory_hostname - ansible_os_family - ansible_distribution - ansible_distribution_version - ansible_kernel - ansible_architecture - ansible_default_ipv4.address - ansible_default_ipv4.interface - ansible_default_ipv4.netmask - ansible_default_ipv4.network - ansible_dns.nameservers - ansible_effective_user_id - ansible_effective_group_id - ansible_env.HOME - ansible_env.SHELL - ansible_eth0.ipv4.address - ansible_processor_cores - ansible_processor_vcpus - name: output env parameter as file template: src: env_params.j2 dest: /home/ubuntu/output_params_ansible_facs owner: ubuntu group: ubuntu mode: 0644
- templates/main.yml
{{ inventory_hostname }} {{ ansible_os_family }} {{ ansible_distribution }} {{ ansible_distribution_version }} {{ ansible_kernel }} {{ ansible_architecture }} {{ ansible_default_ipv4.address }} {{ ansible_default_ipv4.interface }} {{ ansible_default_ipv4.netmask }} {{ ansible_default_ipv4.network }} {{ ansible_dns.nameservers }} {{ ansible_effective_user_id }} {{ ansible_effective_group_id }} {{ ansible_env.HOME }} {{ ansible_env.SHELL }} {{ ansible_eth0.ipv4.address }} {{ ansible_processor_cores }} {{ ansible_processor_vcpus }}
- 実行結果
PLAY [role_bastion] ******************************************************************************************** TASK [Gathering Facts] ***************************************************************************************** ok: [localhost] TASK [verifi : echo environment] ******************************************************************************* ok: [localhost] => (item=dev) => { "dev": "VARIABLE IS NOT DEFINED!", "item": "dev" } TASK [verifi : print ansible variables] ************************************************************************ ok: [localhost] => (item=inventory_hostname) => { "inventory_hostname": "localhost", "item": "inventory_hostname" } ok: [localhost] => (item=ansible_os_family) => { "ansible_os_family": "Debian", "item": "ansible_os_family" } ok: [localhost] => (item=ansible_distribution) => { "ansible_distribution": "Ubuntu", "item": "ansible_distribution" } ok: [localhost] => (item=ansible_distribution_version) => { "ansible_distribution_version": "16.04", "item": "ansible_distribution_version" } ok: [localhost] => (item=ansible_kernel) => { "ansible_kernel": "4.4.0-1072-aws", "item": "ansible_kernel" } ok: [localhost] => (item=ansible_architecture) => { "ansible_architecture": "x86_64", "item": "ansible_architecture" } ok: [localhost] => (item=ansible_default_ipv4.address) => { "ansible_default_ipv4.address": "10.0.1.113", "item": "ansible_default_ipv4.address" } ok: [localhost] => (item=ansible_default_ipv4.interface) => { "ansible_default_ipv4.interface": "eth0", "item": "ansible_default_ipv4.interface" } ok: [localhost] => (item=ansible_default_ipv4.netmask) => { "ansible_default_ipv4.netmask": "255.255.255.0", "item": "ansible_default_ipv4.netmask" } ok: [localhost] => (item=ansible_default_ipv4.network) => { "ansible_default_ipv4.network": "10.0.1.0", "item": "ansible_default_ipv4.network" } ok: [localhost] => (item=ansible_dns.nameservers) => { "ansible_dns.nameservers": [ "10.0.0.2" ], "item": "ansible_dns.nameservers" } ok: [localhost] => (item=ansible_effective_user_id) => { "ansible_effective_user_id": 1000, "item": "ansible_effective_user_id" } ok: [localhost] => (item=ansible_effective_group_id) => { "ansible_effective_group_id": 1000, "item": "ansible_effective_group_id" } ok: [localhost] => (item=ansible_env.HOME) => { "ansible_env.HOME": "/home/ubuntu", "item": "ansible_env.HOME" } ok: [localhost] => (item=ansible_env.SHELL) => { "ansible_env.SHELL": "/bin/bash", "item": "ansible_env.SHELL" } ok: [localhost] => (item=ansible_eth0.ipv4.address) => { "ansible_eth0.ipv4.address": "10.0.1.113", "item": "ansible_eth0.ipv4.address" } ok: [localhost] => (item=ansible_processor_cores) => { "ansible_processor_cores": 1, "item": "ansible_processor_cores" } ok: [localhost] => (item=ansible_processor_vcpus) => { "ansible_processor_vcpus": 2, "item": "ansible_processor_vcpus" } TASK [verifi : output env parameter as file] ******************************************************************* --- before +++ after: /home/ubuntu/.ansible/tmp/ansible-local-3830A34Lzo/tmpJscd8s/env_params.j2 @@ -0,0 +1,18 @@ +localhost +Debian +Ubuntu +16.04 +4.4.0-1072-aws +x86_64 +10.0.1.113 +eth0 +255.255.255.0 +10.0.1.0 +[u'10.0.0.2'] +1000 +1000 +/home/ubuntu +/bin/bash +10.0.1.113 +1 +2 changed: [localhost] PLAY RECAP ***************************************************************************************************** localhost : ok=4 changed=1 unreachable=0 failed=0
$ cat output_params_ansible_facs
localhost Debian Ubuntu 16.04 4.4.0-1072-aws x86_64 10.0.1.113 eth0 255.255.255.0 10.0.1.0 [u'10.0.0.2'] 1000 1000 /home/ubuntu /bin/bash 10.0.1.113 1 2
まとめ
ansible_factを利用して様々なシステム情報を取得することができた。 これで、システム変数を利用したplaybookやtasksを条件に応じた定義をすることができる。