一、ansible 简介
1、介绍
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。
我们要学一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 – playbook,配置管理,部署以及语法编排.我们将会学习如何使用/usr/bin/ansible执行ad-hoc并行命令,我们还会学习ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块,我们会在后期讲到.
2、工作原理
二、install-部署
1、环境准备
ansible服务器(一台主机)
ansible客户机(4台主机)
2、ansible服务器 域名解析
ansible服务器做 域名解析
vim /etc/hosts
10.8.162.105 ansible
10.8.162.14 hosts1
10.8.162.32 hosts2
10.8.162.61 hosts3
10.8.162.81 hosts4
3、ansible服务器 install ansible
安装epel源
yum install -y epel-release
安装ansible
yum install -y ansible
4、ansible服务器 检测部署是否完成
rpm -ql ansible 列出所有文件
rpm -qc ansible 查看配置文件
ansible --help 查看ansible帮助
ansible-doc -l 看所有模块(A10,华为,docker,EC2,aws等等广大厂商设备)
ansible-doc -s yum 看yum模块,了解其功能
以上啊都是在 ansible服务器 上的操作 。
ansible客户端无需任何操作。
三、ansible基础
1.定义主机清单
vim /etc/ansible/hosts
host1
host2
host3
2.测试连通性
ansible localhost -m ping // -m 指定模块。什么功能。ping只是其中一个模块。还有shell,yum等等
3.简洁输出
ansible host1 -m ping -o
4.know_hosts
ansible host1 -m ping -u root -k -o // 增加用户名、密码选项
5.去掉(yes/no)的询问
vim /etc/ssh/ssh_config
StrictHostKeyChecking no
systemctl restart sshd
四、Inventory -主机清单
清查;存货清单;财产目录;主机清单
1、增加主机组
vim /etc/ansible/hosts
[webserver]
host1
host2
host3
host4
[root@localhost ~]# ansible webserver -m ping -u root -k -o
SSH password:
host3 | SUCCESS => {"changed": false, "ping": "pong"}
host1 | SUCCESS => {"changed": false, "ping": "pong"}
host4 | SUCCESS => {"changed": false, "ping": "pong"}
host2 | SUCCESS => {"changed": false, "ping": "pong"}
2、增加用户名 密码
vim /etc/ansible/hosts
[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
3、增加端口
将host1的sshd程序端口修改为2222
# vim /etc/ssh/sshd_config
Port 2222
# systemctl restart sshd
ansible webservers -m ping -o // 失败,因为默认端口已更改
vim /etc/ansible/hosts
[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='777777' ansible_ssh_port='2222'
host[2:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
请将用户名密码和端口回复原状
4、组:变量
ansible内部变量可以帮助我们简化主机清单的设置
vim /etc/ansible/hosts
[webserver]
host[1:4]
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'5、子分组
将不同的分组进行组合
vim /etc/ansible/hosts
[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
五、Ad-Hoc-点对点模式
1.shell模块
ansible-doc shell // 帮助
ansible webserver -m shell -a 'hostname' -o // 获取主机名
ansible webserver -m shell -a 'hostname' -o -f 2 // -f 2 指定线程数
ansible host2 -m shell -a 'yum -y install httpd' -o // 部署apache
ansible host3 -m shell -a 'uptime' -o // 查询系统负载
2.复制模块
ansible-doc copy // 帮助
案例
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'
如果文件有多份,可以进行备份。(注意:backup 在用之前,如果之前做了 copy ,则需要 源文件 src=/etc/hosts 要有更新的新内容 )
[root@localhost ~]# ls /tmp/
2.txt 2.txt.17037.2017-11-16@16:23:41~
3.用户模块
ansible-doc user // 帮助
ansible webserver -m user -a 'name=qianfeng state=present' // 创建用户
修改密码
1.生成加密密码
echo '777777' | openssl passwd -1 -stdin
生成加密密码值:
$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272.
2.修改密码
ansible webserver -m user -a 'name=qianfeng password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."'
3.修改shell
ansible webserver -m user -a 'name=qianfeng shell=/sbin/nologin append=yes'
删除用户
ansible webserver -m user -a 'name=qianfeng state=absent'
4.软件包管理
ansible-doc yum // 帮助
ansible host1 -m yum -a 'name="*" state=latest' // 升级所有包
ansible host2 -m yum -a 'name="httpd" state=latest' // 安装 apache
ansible host1 -m yum -a 'name="httpd" state=absent' // 卸载 apache
5.服务模块
ansible-doc service // 帮助
ansible host2 -m service -a 'name=httpd state=started' // 启动
ansible host2 -m service -a 'name=httpd state=started enabled=yes' // 开机启动
ansible host2 -m service -a 'name=httpd state=stopped' // 停止
ansible host2 -m service -a 'name=httpd state=restarted' // 重启
ansible host2 -m service -a 'name=httpd state=started enabled=no' // 开机禁止启动
6.文件模块
ansible-doc file // 帮助
ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' // 创建文件
ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory' // 创建目录
7.收集模块
ansible-doc setup // 帮助
ansible host3 -m setup // 查询所有信息
ansible host3 -m setup -a 'filter=ansible_all_ipv4_addresses'