自动化运维 ansble

1.安装配置ansble

yum install epel-release -y #安装epel仓库
yum install ansible -y

2.配置主机清单

vim /etc/ansible/hosts

[web-proxy]
#分组
192.168.1.112 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=yxy7714707@
#IP ssh的端口 ssh账户和密码
[web-server]
192.168.1.12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=yxy7714707@
192.168.1.13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=yxy7714707@
# ```
# 3.测试
ansible all -m ping 
![](https://s1.51cto.com/images/blog/201910/17/455b25dc079a2832ba8abac678f6fa0f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
绿色说明成功了
![](https://s1.51cto.com/images/blog/201910/17/33a69564af4f7b70cbc50ca33c06bc63.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
这种报错是应为,第一次ssh连接,对方主机的指纹不在这台电脑上,用ssh先连接下即可
anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
-i 可选择主机清单,不指定默认到/etc/ansible/hosts找   后面跟生效范围,可以选择单个ip(单台主机)或者一组主机或者all(该清单里的所有主机)。 -m 模块(可以理解为命令) -a模块参数
# 4.ansible-playbook 简单小脚本
vim web.yml #写自动化脚本
- hosts: web-server
  #应用生效的组
  vars:
    IP: "{{ ansible_ens33['ipv4']['address']}}"
    #把需要下发机器的ip赋值给IP这个变量,应用不同机器时,这个值会根据机器的实际ip改变
    port: 233
    #赋值233 给port这个变量,变量也可以在/etc/ansible/hosts文件里赋值
  remote_user: root
  tasks:
  - name: 安装nginx
    yum: name=nginx state=latest
  - name: 复制nginx配置文件,如果执行了择触发,下面的动作 重启nginx
    copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
  - name: 修改nginx的的监听IP
    lineinfile: dest=/etc/nginx/nginx.conf regexp='listen       80 default_server;' line='listen       {{port}} default_server;'
    #regexp里面是正则匹配,记住如果匹配的字符有高亮要加转义,line里面是要替换的字符,{{port}}是调用的变量,
    notify:
    #触发器,只有上面那个命令执行了才会调用以下脚本
    - cq nginx
    #表示如果上面那个语句执行了,就调用cq nginx指令,该指令在下面,handlers里定义的
  - name: 复制index主页文件
    copy: src=/usr/share/nginx/html/index.html dest=/usr/share/nginx/html/index.html
  - name: 输入IP地址到index.html中
    lineinfile: dest=/usr/share/nginx/html/index.html regexp="192.168.0.0" line="{{IP}}:{{port}}"
  - name: 启动nginx服务
    service: name=nginx state=started
  handlers:
  - name: cq nginx
    service: name=nginx state=restarted
#PS yml脚本 格式及其严格,请严格按照上述格式书写

ansible-playbook web.yml #运行脚本
![](https://s1.51cto.com/images/blog/201910/17/97b732e5aa65331ecdc1eb2d38ffb72d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
8个命令全部OK,表示全部执行成功
![](https://s1.51cto.com/images/blog/201910/17/2ae04279f95a127a12f9b838ed16dbe1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
访问其中一台的233端口,发现已经有内容了,内容还是根据参数里变量自己生成的。
# 5.反代脚本,ansible模板的使用
cp /etc/nginx/nginx.conf nginx.conf.j2 
#复制一个nginx配置文件,修改成模板
vim nginx.conf.j2 
![](https://s1.51cto.com/images/blog/201910/17/eaadce9385333e20c5b72f7e86177520.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
增加后端web 组
![](https://s1.51cto.com/images/blog/201910/17/c4f6f2a8d98566bcfa535ad095b3a9bd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
把端口改成{{port}} ,等会传递的时候直接用变量替换
vim proxy.yml #编写自动化安装反代脚本
  • hosts: web-proxy
    #生效范围,web-proxy组
    vars:
    port: 666
    #赋值233 给port这个变量,变量也可以在/etc/ansible/hosts文件里赋值
    remote_user: root
    tasks:
    • name: 安装nginx
      yum: name=nginx state=latest
    • name: 传递模板文件
      template: src=/root/ansible/nginx.conf.j2 dest=/etc/nginx/nginx.conf
      #把模板文件传递过去,里面的端口我已经换成了{{prot}},传递的过程会直接替换成上面的变量参数666
    • name: 启动nginx服务
      service: name=nginx state=started
      
      ansible-playbook proxy.yml  #运行脚本
      ![](https://s1.51cto.com/images/blog/201910/17/ee26253d21f57259aad1b9a0eec6e74b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
      这是我第二次运行,4个OK,命令全部执行成功,ansible具有幂等性,已经在目标状态了,ansible不会再次运行的
      ![](https://s1.51cto.com/images/blog/201910/17/5b67d2cc1196683a52b2aeea0a0a76a0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
      ![](https://s1.51cto.com/images/blog/201910/17/d4b2415d1d0cbce334f4743767c00643.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
      F5 刷新,可以均衡负载,反代成功
    原文作者:wx5a98a78793203
    原文地址: https://blog.51cto.com/13620944/2443429
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞