一.安装
#] yum -y install ansible
一.ansible简介
要求ansible可以无密码连接受控节点(Control node)(也可以使用用户名,密码管理),受控节点无需安装任何客户端
- 控制节点(Control node)
指安装了Ansible的主机,也叫Ansible服务器端,管理机。 Ansible控制节点主要用于发布运行任务,执行控制命令。Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。注意:目前Ansible还不能安装在Windows下
受控节点(Managed nodes)
也叫客户机,就是想用Ansible执行任务的客户服务器。清单(Inventory)
受控节点的列表,就是所有要管理的主机列表。host文件
清单列表通常保存在一个名为host文件中。在host文件中,可以使用IP地址或者主机名来表示具体的管理主机和认证信息,并可以根据主机的用户进行分组。缺省文件:/etc/ansible/hosts,可以通过-i指定自定义的host文件。
模块(Modules)
模块是Ansible执行特定任务的代码块。比如:添加用户,上传文件和对客户机执行ping操作等。Ansible现在默认自带450多个模块,,Ansible Galaxy公共存储库则包含大约3000多个模块,现在还在不断跟新,也可以用python编写适合自己业务模块任务(Task)
是Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务。剧本(Playbook)
是利用YAML标记语言编写的可重复执行的任务的列表,playbook实现任务的更便捷的读写和贡献。比如,在Github上有大量的Ansible playbooks共享,你要你有一双善于发现的眼睛你就能找到大量的宝藏。角色(roles):角色是Ansible 1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。
二.安装
#] yum -y install ansible
三.配置
配置文件
默认的配置文件位于/etc/ansible/ansible.cfg下。可以使用此配置文件来修改绝Ansible大多数设置,一般无需额外多配置,默认配置应能满足大多数使用情况。关于Ansible配置文件,其执行程序会按照一定顺序搜索配置:
Ansible按照以下顺序搜索配置文件,优先配置优先使用,而忽略其余配置文件:
$ANSIBLE_CONFIG环境变量。
任务当前目录下的:ansible.cfg(如果在当前目录中)。
当前用户下的ansible.cfg:~/.ansible.cfg
默认配置文件:/etc/ansible/ansible.cfg。
]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False #首次连接时不要手动输yes,ansible自己输
主机清单文件
默认清单配置文件位于/etc/ansible/hosts中,但是通过ansible.cfg配置文件中修改此位置。也可以通过-i自定义hosts清单。
为了安全起见,建议不要直接在/etc/ansible/host配置清单,尤其是有用户认账等信息时候。对于长期不执行ansible可以将host文件加密锁定,防止信息泄露,引起安全事故。
清单文件格式如下:
[dbs]
db1
db2 ansible_ssh_user=root ansible_ssh_pass=password ansible_ssh_port=22
[webs]
web1
web2
[lamp:children]
dbs
webs
四.常用模块
ping
]# ansible dbs -m pingshell
]# ansible dbs -m shell -a "df -h | grep home"copy
script //本地写脚本,然后script模块批量执行
]# ansible dbs -m script -a "/root/test.sh"yum
service
lineinfile
setup
获取主机计信系,playbooks里经常会用到的另一个参数gather_facts与该模块相关,setup模块经常用的是filter参数
]# ansible webs -m setup -a "filter=ansible_distribution"
五.playbook(剧本)
Ansible 的剧本文件格式使用的是 YAML 语法,每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典.
hosts(主机和用户) 用于指明 playbook 作用的目标
tasks(任务列表 ) 用于定义 playbook 所要执行的操作,比如安装软件,拷贝文件等
handlers (在发生改变时会被触发的操作)
每一个 task 必须有一个名称 name,这样在运行 playbook 时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个 task 的。每一个name下一行都是一个模块
ansible-playbook apache.yaml --syntax-check 检验语法(最好每次执行前都去检测写语法)
ansible-playbook apache.yaml --list-tasks 列出任务
ansible-playbook apache.yaml --list-hosts 列出主机
ansible-playbook apache.yaml -C 试运行
ansible-playbook apache.yaml 运行