Ansible 初心者からなかなか脱却出来ないかっぱです。
Ansible で OS を判断させて何かさせたい場合には…
Ansible で OS を判断させて何かさせたい場合には… fact パイセンで取得出来る情報を利用して判断させる。 setup モジュールを利用することで対象ホストの fact 情報を取得することが出来ちゃう。
$ ansible -i inventories/docker_inventory.rb all -m setup -c paramiko ansible_01 | success >> { "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.17.0.22" ], "ansible_all_ipv6_addresses": [ "fe80::42:acff:fe11:16" ], "ansible_architecture": "x86_64", "ansible_bios_date": "12/01/2006", "ansible_bios_version": "VirtualBox", "ansible_cmdline": { "BOOT_IMAGE": "/boot/vmlinuz-3.13.0-53-generic", "console": "ttyS0", "ro": true, "root": "UUID=74067709-41f2-4c31-95fb-9e71e95977b1" }, "ansible_date_time": { "date": "2015-06-17", "day": "17", "epoch": "1434548591", "hour": "13", "iso8601": "2015-06-17T13:43:11Z", "iso8601_micro": "2015-06-17T13:43:11.114545Z", "minute": "43", "month": "06", "second": "11", "time": "13:43:11", "tz": "UTC", "tz_offset": "+0000", "weekday": "Wednesday", "year": "2015" }, (snip) "uuid": "NA" } ], "ansible_nodename": "767187c7c66d", "ansible_os_family": "RedHat", "ansible_pkg_mgr": "yum", "ansible_processor": [ "GenuineIntel", "Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz" ], "ansible_processor_cores": 1, "ansible_processor_count": 1, "ansible_processor_threads_per_core": 1, "ansible_processor_vcpus": 1, "ansible_product_name": "VirtualBox", "ansible_product_serial": "NA", "ansible_product_uuid": "NA", "ansible_product_version": "1.2", "ansible_python_version": "2.6.6", "ansible_selinux": false, "ansible_ssh_host_key_dsa_public": "AAAAB3NzaC1kc3MAAACBALYuwGoXfZ466L/GXIoXEiA/GEgbw3ukhIExYcZXfEMtaJKldlEqRgrNrZRFg3sl8puOuB7b/8Fl2qhYaAU/u6YeDGnS06Swh2Cge/bknNUOE3jWnqEaauoycIzE9qwxj5jwyUvDv+nJ3Yz+aI0aWaXBbyurUfQ2imZKX33NYBHfAAAAFQC5HkOwPB+e/U1W+CL9ZoPwwWZcxwAAAIAX53f2ms6t+e4E+9Ui+7vjiQWz6xWZrudvEfjqvskJHcCiA+NDkHAMcLd0wfijxgTE98tTrVJXygjA90EKzj2Fn1nhbJW5myEM/sBdMKU8DxXAOmOeL1Hk13iiGNw3yRWBIXpi+PSbFmILIzcwX0LjnYTPcutPlh3mYqgxfZdmtQAAAIB8tWmw8AjBY9TqYrR+UxaZtQ4i4sqwdwVDGYCXKreeg7sHpkKIuSoXx4Ur/3r2Pk5T2lbWrRi3LQ4EE9bbSYfR5GD+xwdRAiEnUX/A7nj5QzB6oWMml9Q19yT0yDgaC1pU1SEpDSrM6iBk7Ry5Xld8/E4DaVBszHYfaZL2LCsSCQ==", "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAABIwAAAQEA2W5Mz8+zCBOwWUjIZFtUg+gKs7KcpLkx2tmwwrA0ZysVk5NGy2N01jAYeNBXypgiAPPLsgqeI9LjDESEj8r7XnLyo1dcIM7+YICGWRZAOa+YDTrrgmQ1603ZV9CycoGiRejkaOjs2AW0Gn45YkH/+Pdrc4gL3NV/DfJUC9l6aXV7vSsPm65tkVZfXtJwU+lCYKyvOzMnvhb5L8YUhUaRNLbXUXvRcFLeKTNR6KHEL13VtywRh6ezzcvPiXRCNBviikCqNu1u/YZ1uI/2ZgliCmSOQywi+QIlhkE/zWjGFCR5jh0S1+9fi827sFNlb/DDnS/inJK7QM0yVX+aU+OM2w==", "ansible_swapfree_mb": 0, "ansible_swaptotal_mb": 0, "ansible_system": "Linux", "ansible_system_vendor": "innotek GmbH", "ansible_user_dir": "/home/ansible", "ansible_user_gecos": "", "ansible_user_gid": 500, "ansible_user_id": "ansible", "ansible_user_shell": "/bin/bash", "ansible_user_uid": 500, "ansible_userspace_architecture": "x86_64", "ansible_userspace_bits": "64", "ansible_virtualization_role": "guest", "ansible_virtualization_type": "docker", "module_setup": true }, "changed": false }
上記の出力結果は Docker コンテナが対象となる場合の出力例。
尚、ansible_os_family
に RedHat
が含まれている環境に対して適用する場合には以下のように…
- name: hogehoge shell: echo "hogehoge" when: "ansible_os_family == 'RedHat'"
ってな感じで書く。
但し、Amazon Linux であれば…
正攻法
ところがどっこい Amazon Linux だけ何かさせたいと思った時に ansible_os_family
ではなくて ansible_distribution
を使えば良さそう。
- name: hogehoge for Amazon Linux shell: echo "hogehoge" when: "ansible_distribution == 'Amazon'"
ちょっと強引
ちょっと強引かもしれないけど、以下のように "'Amazon' in ansible_distribution"
という書き方でもイケた。
- name: update ntpd for amazon linux shell: yum install ntp when: "'Amazon' in ansible_distribution"
'foo' in xxxxxxx
を利用すれば fact で取得した xxxxxxx の値が foo
に完全一致していなくても条件として合致することが出来るので、foo バージョン番号
みたいな場合にも利用出来そう。