网站集群批量管理-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 [email protected]
[email protected]'s password:
Permission denied, please try again.
​
-> % ssh [email protected]
[email protected]'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暂不更新,赶进度~~~

相关推荐
꧁༺朝花夕逝༻꧂1 天前
Ansible小试牛刀
ansible
꧁༺朝花夕逝༻꧂1 天前
Ansible+Zabbix-agent2快速实现对多主机监控
运维·ansible
m0_628017592 天前
项目四.高可用集群_ansible
ansible
云攀登者-望正茂2 天前
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
ansible
云攀登者-望正茂5 天前
使用 Ansible 在 Windows 服务器上安装 SSL 证书
ansible
tianyuanwo6 天前
Ansible自动化运维全解析:从设计哲学到实战演进
运维·自动化·ansible
哆啦A梦15886 天前
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/[email protected] 更换为 go-ansible/@v1.1.7
开发语言·golang·ansible
lifeng43217 天前
在 CentOS 上将 Ansible 项目推送到 GitHub 的完整指南
centos·github·ansible
运维成长记12 天前
ansible-playbook 进阶 接上一章内容
linux·服务器·ansible
半桶水专家12 天前
Ansible 配置Playbook文件格式、关键字和语法详解
ansible