ansible実行時のエラー

表題の通り。Amazon Linux上のansibleで、`–syntax-check`では問題なかったので実行してみたらエラーで落ちた。

■ 環境

  • Ansible 2.2.1.0, 2.3.1.0
  • Amazon Linux

■ error

下記のようなエラーが出た。

fatal: [XX.XX.XX.X1]: FAILED! => {"changed": false, "failed": true, "msg": "unsupported parameter for module: path"}
fatal: [XX.XX.XX.X2]: FAILED! => {"changed": false, "failed": true, "msg": "unsupported parameter for module: path"}

さて何だろう?実行前に`–syntax-check`で確認したところ問題はなかったのだが。

というところでふと思い出した。Amazon Linux上では`yum update`の対象に入っていなかったことに。

AmazonLinuxにAnsibleをインストール

versionを確認する。

$ ansible --version
ansible 2.2.1.0
  :
$

というわけで、実行していたplaybookでは”path“を使っている箇所があったのが原因であったようだ。”2.2“以前では”dest”で指定する必要がある。”2.3“からのマニュアルでは”dest“は消えて”path“となっている。ローカルも”2.3.1.0“にあげていたので全て”path“で書いていたようである。

Amazon Linux上の`ansible`を`update`して再度実行するとエラーなく実行することができた。

$ sudo yum --enablerepo=epel update ansible

以上。

■ 関連

AmazonLinuxにAnsibleをインストール

グループの親子関係

Ansibleにおいて表題の通り。

■ 環境

  • Ansible 2.3.1.0

■ InventoryFile

下記のように親子関係を持つことが可能だ。

$ cat hosts
[projectA:children]
sub1
sub2

[sub1]
192.168.33.11
192.168.33.12

[sub2]
192.168.33.21
192.168.33.22
192.168.33.23

[parent:vars]
ansible_user=withsin
$

projectA“全体に対して実行したい場合は下記のようにする。

$ ansible-playbook example.yml

sub1“のグループのみに実行したい場合は下記のようにする。

$ ansible-playbook example.yml -l sub1

sub2“のグループのみに実行したい場合は下記のようにする。

$ ansible-playbook example.yml -l sub2

変数”ansible_user“は上記の全てで適用される。

また、これらは”example.yml“の中で”hosts: projectA“と書いている場合にも問題なく実行可能である。

以上。

■ 関連

playbook実行時にホストグループを指定

InventoryFileでグループ変数

Ansibleにおいて表題の通り。以前にも書いた気がするのだが、一応メモ。

■ 環境

  • Ansible 2.3.1.0

■ Group Variables

http://docs.ansible.com/ansible/intro_inventory.html#group-variables

グループ全体に対しての変数を書くことが可能である。

$ cat hosts
[web]
192.168.33.11
192.168.33.12

[web:vars]
ansible_ssh_private_key_file=~/.ssh/withsin.pem

[app]
192.168.33.21
192.168.33.22
192.168.33.23

[app:vars]
ansible_user=withsin

と、前にも同じことを何度も書いていることに気がついた。しかも最近ではないか…。

以上。

■ 関連

InventoryFileで全Hostに対する変数

ansible_ssh_private_key_file

playbook実行時にホストグループを指定

ansibleにおいて表題の通り。

■ 環境

  • Ansible 2.3.1.0

■ playbook

playbookには下記のように全てのホストを対象としている場合、とあるホストグループにのみplaybookを実行したい。

$ cat example.yml
- name: example
  hosts: all
  gather_facts: yes
  :

これを下記のように実行してしまうと、Inventoryfileに書いている全てのホストに対して実行されてしまう。

$ ansible-playbook -i hosts example.yml

Inventoryfileには下記のようにホストグループを分けている。

$ cat hosts
[group1]
host001
host002
host003

[group2]
host011
host012

この”group2“にのみ実行をしたい場合は下記のように指定する。

$ ansible-playbook -i hosts -l group2 example.yml

これで”group2“のみに実行できる。

以上。

ansible_ssh_private_key_file

Ansibleにおいて表題の件について。

■ 環境

  • Ansible 2.2.1.0

■ Inventoryfile

Inventoryfileでグループ分けをしているが、あるグループのみ共通鍵があるのでその鍵でSSHしたい。

$ cat hosts
[group1]
XX.XX.XX.X1
XX.XX.XX.X2

[group2]
XX.XX.XX.Y1
XX.XX.XX.Y2

[group2:vars]
ansible_ssh_private_key_file=~/.ssh/private2.pem

上記のように記載すると、”group1“には”ansible.cfg“等に記載されているデフォルトの鍵を使用し、”group2“にのみ”~/.ssh/private2.pem“を使用するようになる。

以上。

■ 関連

ansible.cfg

InventoryFileで全Hostに対する変数

InventoryFileでグループ変数