|
Ansible是一种集成IT系统配置管理、应用部署、执行特定任务的开源平台
特点:
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作
默认使用SSH协议对设备进行管理
主从集中化管理,配置简单、功能强大、扩展性强
支持API及自定义模块、可通过python轻松扩展
通过Plybooks来定制强大的配置、状态管理
对云计算平台,大数据都有很好的支持
提供一个功能强大、操作性强的Web管理界面和REST API 接口 ----AWX平台
1、安装EPEL
http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
安装ansible
yum install ansible -y
2、修改主机与组配置
vim /etc/ansible/hosts
## green.example.com
#
# blue.example.com
192.168.190.131
192.168.190.132
[webservers]
## alpha.example.org
## beta.example.org
192.168.190.131
192.168.190.132
测试连通性
[iyunv@melon ~]# ansible 192.168.190.132 -m ping -k
SSH password:
192.168.190.132 | SUCCESS => {
"changed": false,
"ping": "pong"
}
3、配置linux主机ssh无密码访问
ssh-keygen -t rsa #执行,有询问直接回车即可
完成后会在 /root/.ssh/ 下生成一对秘钥 ,id_rsa为密钥 id_rsa.pub为公钥(需要下发到被控主机用户.ssh目录,同时要求重新命名成authorized_keys 文件)
使用ssh-copy-id公钥拷贝工具同步公钥至被控主机, 命令格式:/usr/bin/ssh-copy-id [-i [identity_file]] [user@machine]
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.190.132
完成后运行ssh root@192.168.190.132,如直接进入目标root账号,说明配置成功
在执行就不需要密码了
ansible 192.168.190.* -m ping
4、定义主机于组
所有定义的主机与组规则都在 /etc/ansible/hosts 文件中,webservers 和 dbservers 为组名,紧跟着的主机为它的成员
192.168.190.131
192.168.190.133
[webservers]
## alpha.example.org
## beta.example.org
192.168.190.131
192.168.190.133
[dbservers]
192.168.190.134
192.168.190.135
5、主机可以用 域名、IP、别名进行标识
别名定义例:
jpname ansible_ssh_port=22 ansible_ssh_host=192.168.190.149
组成员主机名称支持正则描述如:
[webservers]
www[
01:50].example.com
db
-[a:f].example.com
jpname为定义的一个别名,更多主机变量:
ansible_ssh_host #连接目录主机的地址
ansible_ssh_port #连接目录主机的SSH端口,默认22无需指定
ansible_ssh_user #连接目录主机的默认用户
ansible_ssh_pass #连接目录主机的默认用户的密码
ansible_connection #目录主机连接类型,可以使local、ssh、paramiko
ansible_ssh_private_key_file #连接目录主机的ssh私钥
ansible_ssh_host #指定采用非Python的其他脚本语言
6、定义主机变量
主机可以指定变量,以便后面提供Playbooks配置使用,例 定义host1和host2上Apache参数MaxRequestsPerChild,目的是让两台主机根据不同机器产生有差异的httpd.conf(类似于saltstack的pillar和state)
[testservers]
host1 maxRequestsPerChild
=808
host2 maxRequestsPerChild
=909
定义组变量(组变量的作用域是覆盖组的所有成员,通过定义一个新块,快名是:组名+:vars 组成)
[testservers]
host1
host2
[testservers:vars]
maxRequestsPerChild
=808
变量的命名规则
变量名的命名规则有字母、数字和下划线组合组成,变量必须以字母开头,不合法变量名:"12port"、"foo-port"、"foo port"、"foo.port"
7、分离主机于组特定数据
ansible支持将/etc/ansible/hosts 文件中的主机名于组变量剥离出来存在指定的文件夹中,采用YAML格式存放,存放位置规定:/etc/ansible/group_vars/+组名 和 /etc/ansible/host_vars/+主机名
例如:/etc/ansible/group_vars/webservers
定义的webservers变量格式(定义的webservers要和hosts中定义的组名字一致)(YAML格式,变量名: 变量值)
maxRequestsPerChild: 808
/etc/ansible/group_vars/all (all文件内的变量表示对所有组都生效) |
|
|
|
|
|
|