网站集群批量管理-Ansible流程控制与Roles

一、流程控制

1、handlers触发器

应用场景:一般用于分发配置文件的时候.

如果配置文件发生变化则重启服务,如果没有变化则重启.

案例01: 没有使用触发器handlers

yaml 复制代码
- hosts: web
  gather_facts: no
  tasks:
  - name: 分发配置文件 
    copy:
      src: exports
      dest: /data/exports
      backup: yes
    notify:
      - 重启服务
  handlers:
    - name: 重启服务
      systemd:
        name: nfs
        state: reloaded
  • handlers触发器,应用场景:配置文件发生变化,然后重启服务(或做其他)
  • 格式:埋雷:设置绊雷(notify:写个名字),handlers设置名字和模块
  • 注意事项:handlers放在剧本的最后,否则都会被识别为handlers.

2、when判断

用于给ans运行的task(模块)设置条件,满足或不满足条件在运行对应的模块.

应用建议: when进行判断,一般与变量一起使用.

when条件一般与facts变量或register变量一起使用.

案例02 : 如果系统是centos则 安装sl,cowsay,如果是ubuntu 则安装cmatrix

yaml 复制代码
- hosts: all
  tasks:
    - name: yum sl,cowsay
      yum:
        name: sl,cowsay
        state: installed
      when: ansible_distribution == "CentOS"
    - name: apt cmatrix
      apt:
        name: cmatrix
        state: present
      when: ansible_distribution == "Ubuntu"

ssh安全策略:禁止root账号登录

sh 复制代码
[root@nanjing ssh]# vim /etc/ssh/sshd_config 
修改内容:PermitRootLogin no
[root@nanjing ssh]# systemctl reload sshd
​
-> % ssh root@43.137.51.15
root@43.137.51.15's password:
Permission denied, please try again.
​
-> % ssh shishuwu@43.137.51.152
shishuwu@43.137.51.152's password:
[root@nanjing shishuwu]# su - root
[root@nanjing ~]# pwd
/root
  • when用于进行判断,满足/不满足条件就执行对应的模块(不满足条件的主机提示skip).
  • when一般与变量一起使用.
  • (条件1) and (条件2)
  • (条件1) or (条件2)
  • ansible_hostname is match("web|backup") #类似于grep,支持正则.
  • ansible_hostname is not match("web|backup") #取反,排除.

3、循环

因为在 Ansible 2.5 版本之后,with_items 被弃用,应该使用 looploop_control 替代。

loop 批量创建文件,批量添加用户,批量启动或重启服务.

案例03: 批量启动服务 rpcbind 然后 nfs服务

yaml 复制代码
- hosts: nfs
  gather_facts: no
  tasks: 
    - name: 重启rpcbind,nfs
      systemd: 
        name: "{{ item }}"
        state: restarted
      loop:
        - rpcbind
        - nfs
​

案例04 循环创建用户指定UID

yaml 复制代码
hosts: all
  gather_facts: no
  tasks:
    - name: add user
      user:
        shell: /bin/bash
        name: "{{ item.name }}"
        uid:  "{{ item.uid  }}"
        state: present
      loop:
        - { name: 'oldboy', uid: 2020  }
        - { name: 'lidao', uid: 2021  }
        - { name: 'lidao996', uid: 2022  }

二、剧本调试

1、检查语法与单步执行

-C --check 模拟运行,不作出改变,一些变量可能会提示报错,因为-C没有真正运行剧本

--syntax-check 只做语法检查,不运行.

高级: step 单步运行. y执行这个task,n忽略这个task,c自动运行

2、tag标签

tag标签类似于超市物品的分类,只不过tag标签是给ansible中的task进行分类.加上标记

运行剧本的时候运行指定的tag标签或排除某些tag.

sh 复制代码
ansible-playbook -i hosts -t 04.start srv 14.deploy-nfs-tag.yml

运行剧本的时候

-t 运行的标签,如果多个标签通过","分割 skip-tags 排除指定的tags,如果多个标签通过","分割

3、忽略错误

运行剧本的时候,因为重复运行导致的错误提示,并发是真的错误.

比如:目录已经存在,用户已经存在. 在这种情况下,我们可以通过ignore_errors忽略错误,让剧本可以继续运行.

sh 复制代码
ignore_errors: true

三、Jinja2模版

template模块与xxx.j2文件

应用场景:

1、进行分发配置文件或文件的时候,需要在文件中使用变量,需要使用jinja2文件 nginx.conf.j2,需要使用template模块进行分发.

2、进行判断

3、进行循环

yaml 复制代码
- hosts: all
  gather_facts: no
  tasks:
    - name: 分发motd文件 
      template:
        src: templates/motd.j2
        dest: /etc/motd
        backup: yes
    - name: 分发motd文件 
      copy:
        src: templates/motd.j2
        dest: /tmp/motd
        backup: yes

四、include文件包含

day42暂不更新,赶进度~~~

相关推荐
腾科张老师4 小时前
为什么要使用Ansible实现Linux管理自动化?
linux·网络·学习·自动化·ansible
脱了格子衬衫1 天前
linux安装ansible
linux·运维·ansible
ccnnlxc1 天前
网站架构知识之Ansible剧本(day022)
ansible
jyan_敬言3 天前
【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本
android·linux·运维·服务器·c语言·数据结构·ansible
ccnnlxc3 天前
网站架构知识之Ansible进阶2(day023)
ansible
ccnnlxc3 天前
网站架构知识之Ansible进阶(day022)
linux·服务器·ansible
咕噜Yuki06093 天前
RHCE 8.0考试指南:使用Ansible进行自动化管理
运维·自动化·ansible·rhce考试·职业技能认证·rhce8.0
赶紧回家去3 天前
ansible进阶功能
ansible
ccnnlxc3 天前
网站架构知识之Ansible模块(day021)
ansible
紫晓宁7 天前
jmeter结合ansible分布式压测--3压测执行
分布式·jmeter·ansible