Cobbler 外部 Inventory 脚本-实例
在 cobbler 中,假设有一个如下的场景:
cobbler profile add --name=webserver --distro=CentOS6-x86_64
cobbler profile edit --name=webserver --mgmt-classes="webserver" --ksmeta="a=2 b=3"
cobbler system edit --name=foo --dns-name="foo.example.com" --mgmt-classes="atlanta" --ksmeta="c=4"
cobbler system edit --name=bar --dns-name="bar.example.com" --mgmt-classes="atlanta" --ksmeta="c=5"‘foo.example.com’ 是一个域名,Ansible 可以通过这个域名寻址找到对应的主机foo,对其进行操作.也可以通过组名 ‘webserver’ 或者 ‘atlanta’ 寻址找到这个主机,只要这个主机是属于这两个组的.直接使用 foo 是不行的.例如执行命令 “ansible foo” ,无法找到该主机,但使用 “ansible ‘foo*’” 却可以,因为域名 ‘foo.example.com’ 以foo开头.
这个脚本不仅提供主机和组的信息.如果运行了 ‘setup’ 模块(只要使用 playbooks,’setup’ 模块会自动运行),变量 a, b, c 可按照以下模板自动填充:
# file: /srv/motd.j2
Welcome, I am templated with a value of a={{ a }}, b={{ b }}, and c={{ c }}模板的使用如下:
ansible webserver -m setup
ansible webserver -m template -a "src=/tmp/motd.j2 dest=/etc/motd"Note
组名 ‘webserver’ 是 cobbler 中定义的.你仍然可以在 Ansible 的配置文件中定义变量. 但要注意,变量名相同时,外部 inventory 脚本中定义的变量会覆盖 Ansible 中的变量.
执行上面命令后,主机 foo 的/etc/motd文件被写入如下的内容:
Welcome, I am templated with a value of a=2, b=3, and c=4主机 ‘bar’ (bar.example.com)的 /etc/motd 中写入如下内容:
Welcome, I am templated with a value of a=2, b=3, and c=5你也可以通过下面这个命令测试变量的替换:
ansible webserver -m shell -a "echo {{ a }}"也就是说,你可以在参数或命令操作中使用变量的替换.
学员评价