##主机组
/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