##主机组
/etc/ansible/hosts 文件的格式与windows的ini配置文件类似:
mail.example.com
[webservers]
foo.example.combar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
加端口号:
badwolf.example.com:5309
一组服务器
[webservers]
www[01:50].example.com
[databases]
db-[a:f].example.com
[targets]
localhost ansible_connection=local
other1.example.com ansible_connection=ssh ansible_ssh_user=mpdehaan
other2.example.com ansible_connection=ssh ansible_ssh_user=mdehaan
选择连接类型和连接用户名
#patterns类型
ansible <pattern_goes_here> -m <module_name> -a <arguments>
如下的patterns等同于目标为仓库(inventory)中的所有机器:
all
*
也可以写IP地址或系列主机名:
one.example.com
one.example.com:two.example.com
192.168.1.50
192.168.1.*
你也可以不必严格定义groups,单个的host names, IPs , groups都支持通配符:
*.example.com
*.com
大部分人都在patterns应用正则表达式,但你可以.只需要以 ‘~’ 开头即可:
~(web|db).*\.example\.com
Ansible 的命令行工具来重启 Atlanta 组中所有的 web 服务器,每次重启10个.
$ ansible atlanta -a "/sbin/reboot" -f 10
行
ansible atlanta -a "/usr/bin/foo" -u username
ansible raleigh -m shell -a 'echo $TERM'
尤其注意
ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"
以并行的方式同时
使用 file 模块可以做到修改文件的属主和权限
$ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
使用 file 模块也可以创建目录,与执行 mkdir -p 效果类似:
$ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
删除目录(递归的删除)和删除文件:
$ ansible webservers -m file -a "dest=/path/to/c state=absent"
确认一个软件包已经安装,但不去升级它:
ansible webservers -m yum -a "name=acme state=present"
确认一个软件包的安装版本:
$ ansible webservers -m yum -a "name=acme-1.5 state=present"
确认一个软件包还没有安装:
$ ansible webservers -m yum -a "name=acme state=absent"
使用
$ ansible all -m user -a "name=foo password=<crypted password here>"
$ ansible all -m user -a "name=foo state=absent"
确认某个服务在所有的webservers上都已经启动:
$ ansible webservers -m service -a "name=httpd state=started"
所有的webservers上重启某个服务(译者注:可能是确认已重启的状态?):
$ ansible webservers -m service -a "name=httpd state=restarted"
确认某个服务已经停止:
$ ansible webservers -m service -a "name=httpd state=stopped"
在
$ ansible all -m setup
#PLAYBOOK基础
Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合.
主机与用户:
你可以为
- hosts: webservers
remote_user: root
Tasks 列表:
在运行
如果
tasks:
- name: Copy ansible inventory file to client
copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
owner=root group=root mode=0644
在
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}
Handlers: 在发生改变时执行的操作
这里有一个例子,当一个文件的内容被改动时,重启两个 services:
- name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
‘notify’ 下列出的即是 handlers.
这里是一个
handlers:
- name: restart memcached
service: name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted
行的运行
ansible-playbook playbook.yml -f 10