正文
这个脚本不仅提供主机和组的信息.如果运行了 ‘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 }}"
也就是说,你可以在参数或命令操作中使用变量的替换.
AWS EC2 外部 inventory 脚本
使用 AWC EC2时,维护一份 inventory 文件有时不是最好的方法.因为主机的数量有可能发生变动,或者主机是由外部的应用管理的,或者使用了 AWS autoscaling.这时,使用 EC2 external inventory 脚本是更好的选择.
脚本的使用方式有两种,最简单的是直接使用 Ansible 的命令行选项
-i
,指定脚本的路径(脚本要有可执行权限):
ansible -i ec2.py -u ubuntu us-east-1d -m ping
第二种方式,把脚本拷贝为
/etc/ansible/hosts
,并赋予可执行权限.还需把 ec2.ini 文件拷贝到
/etc/ansible/ec2.ini
,然后运行 ansible.
要成功的调用 API 访问 AWS,需要配置 Boto (Boto 是 AWS 的 Python 接口).可用的方法有多种,请参见: methods .
最简单的方法是定义两个环境变量:
export AWS_ACCESS_KEY_ID='AK123'
export AWS_SECRET_ACCESS_KEY='abc123'
如何知道配置是否正确,执行脚本来测试: