Ansible基础

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

 

测试连通性

[root@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文件内的变量表示对所有组都生效)

 

posted @ 2017-03-27 09:12  J_hong  阅读(296)  评论(0)    收藏  举报