ansible_os_family/ansible_pkg_mgr

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

■ 環境

  • Ansible 2.3.1.0

■ ansible -m setup

$ ansible [対象] -m setup

このコマンドで”gather_facts“で収集している情報がどういうものか取得できる。

自信が”task“の中でよく使用する表題の項目についても下記のように取得できている。

CentOSの場合

$ ansible host1 -m setup
  :
        "ansible_lsb": {
            "codename": "Final",
            "description": "CentOS release 6.9 (Final)",
            "id": "CentOS",
            "major_release": "6",
            "release": "6.9"
        },
  :
        "ansible_os_family": "RedHat",
        "ansible_pkg_mgr": "yum",
  :
$

Ubuntuの場合

$ ansible host2 -m setup
  :
        "ansible_lsb": {
            "codename": "xenial",
            "description": "Ubuntu 16.04.2 LTS",
            "id": "Ubuntu",
            "major_release": "16",
            "release": "16.04"
        },
  :
        "ansible_os_family": "Debian",
        "ansible_pkg_mgr": "apt",
  :
$

以上。

SSHユーザを指定

Ansibleにおいて表題の通り。

■ 環境

  • Ansible 2.3.1.0
  • Mac OSX El Capitan

■ ansible.cfg

開発環境で主に使うので、”ansible.cfg“には下記を書いている。

$ cat ansible.cfg
[defaults]
inventory = hosts
remote_user = vagrant
private_key_file = ~/.vagrant.d/insecure_private_key
host_key_checking = False
retry_files_enabled = False
$

いざ開発したものを試しに別環境にやってみようかと思うと、”ansible.cfg“の設定が優先されてしまうのでたまに困ることがある。

よって”hosts“に下記のように”variable“として書くことにしている。

$ cat hosts
  :
[group1]
host001
host002

[group1:vars]
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_ssh_user=root
$

host001“等は”~/.ssh/config“の方に書いている。

もうちょっとうまい方法はないのであろうか。

以上。

■ 関連

ansible_ssh_private_key_file

InventoryFileでグループ変数

複数のホストグループを指定

Ansibleにおいて表題の通り。先日のエントリでは1ホストグループに対して実行していたのだが、複数のグループの時にはどうしたら良いのか、というのを試したメモ。

■ 環境

  • Ansible 2.3.1.0

■ ansible-playbook

親子関係のグループで子のグループにのみ実行したいのだが、その子グループが複数ある。複数の子グループを同時に実行したい。

$ ansible-playbook -l group1 example.yml

上記でホストグループを指定することが可能なので、複数やるには?とマニュアルも読まずに実行してみた。

$ ansible-playbook -l group1 -l group2 example.yml

上記では”group2“でのみ実行された。最後に指定したものが優先されてしまうようである。

$ ansible-playbook -l group1,group2 example.yml

上記のようにリスト形式で指定すると、思い通りの結果が得られた。

以上。

■ 関連

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

グループの親子関係

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実行時にホストグループを指定