一、ansible 简介

1、介绍
    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。
    我们要学一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 – playbook,配置管理,部署以及语法编排.我们将会学习如何使用/usr/bin/ansible执行ad-hoc并行命令,我们还会学习ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块,我们会在后期讲到.

2、工作原理

ansible自动安装mysql ansible自动化运维实例_运维

二、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'