我把Ansible的Inventory文件格式从ini改成了yml的故事

补充(2017/09/27)

    ansible 2.3.xでは問題がないが、2.4.0では次のようなエラーが発生する。
ERROR! Unexpected Exception, this is probably a bug: string indices must be integers
    ini形式で戻したら、エラーが無くなった。2.4.0のbugだと思うが、原因が分かり次第、追記する。

背景

    • 久々にAnsible Inventoryのドキュメントを見たらymlでも作成できるようになっていた。

 

    まだ慣れてないini形式よりplaybookと同様のymlで直した方がいいと判断した。

目标节点列表

正在本地运行的服务器列表

Current machine states:

jumpbox                   running (virtualbox)
dev                       running (virtualbox)
test                      running (virtualbox)
live                      running (virtualbox)
gembox                    running (virtualbox)
proxy                     running (virtualbox)
db1                       running (virtualbox)
db2                       running (virtualbox)
redmine                   running (virtualbox)
chat                      running (virtualbox)
gitlab                    running (virtualbox)
runner                    running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

在/etc/hosts文件中,列出了与服务器名称对应的映射关系。

库存文件

我用Ansible管理本地(macOS Sierra)和目标节点(位于Vagrant上的服务器)。我试图将文件从ini格式转换为yml格式。

local:
  hosts: localhost
  vars:
    ansible_connection: local

all:
  hosts:
    jumpbox: jumpbox
    dev: dev
    test: test
    live: live
    gembox: gembox
    proxy: proxy
    redmine: redmine
    chat: chat
    gitlab: gitlab
    runner: runner
  children:
    db:
      hosts: db[1:2]
  vars:
    ansible_connection: ssh
    ansible_user: vagrant
    ansible_password: vagrant

ansible.cfg -> Ansible 配置文件

在存储库内管理Inventory文件更加方便。
我创建了ansible.cfg文件并写入了Inventory文件等默认设置来使用。

% cat ansible.cfg
[defaults]
inventory = inventories/hosts.yml
forks = 5
log_path = ~/Library/Logs/ansible.log
host_key_checking = false
gathering = smart
executable = /bin/bash -l
retry_files_save_path = ~/.ansible/retry-files

验证

    AnsibleでInventoryファイルをちゃんと解析しているのかを確認する。
% ansible all --list-hosts
  hosts (13):
    jumpbox
    runner
    gitlab
    gembox
    live
    redmine
    dev
    chat
    test
    proxy
    db1
    db2
    localhost
    ansibleコマンドで各サーバーについてpingテストを行う。
% ansible all -m ping
jumpbox | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
gitlab | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
runner | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
live | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
gembox | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
redmine | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
dev | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
test | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
chat | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
proxy | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
db1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
db2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

没问题!

请看以下资料

    Ansible Inventory Document
广告
将在 10 秒后关闭
bannerAds