ansible进阶1


1 条件判断
场景1 需要获取一个结果注入一个变量,然后针对变量值进行判断 && 在playbook中可以使用register将捕获命令的输出保存在临时变量中,然后使用debug模块进行显示输出&&最后通过when进行判断
 when条件统一判断条件 not var.stat.exists
   - name: prepare | Check if MySQL file is already configured.
     stat:
      path: "{{ mysql_file_path }}"
    register: mysql_file_result
    debug:
       var: mysql_file_result
   - name: prepare | Create software files path.
     file:
      path: "{{ mysql_pkg_path }}"
      state: directory
     when: not mysql_file_result.stat.exists

场景2 针对已有变量进行直接判定,变量是预定义好的
   - name: install|cnf
     shell: sed -i "s/read_only.*.OFF/read_only=ON/g" /home/work/mysql/etc/my.cnf && sed -i "s/server-id.*.=1/server-id=2/g" /home/work/mysql/etc/my.cnf
     when: mysql_replication_role == 'slave'
2 变量
  来源:变量分为传入变量和预定义变量两种,前者通过执行命令传入,后者在文件中统一定义后,其他地方直接引用变量名即可
 下面这个就是定义好的变量名和值 注册进入
1 在yaml中定义
- hosts: 127.0.0.1
gather_facts: no
vars:
nginx_port: 8080
delay_seconds: 3
tasks:
接下来就是roles的定义与使用,分为两种
   1 是入口的yml,和普通的yml定义一样.直接定义关键字vars即可
   2 是内部的预定义变量,这里要注意,是有指定的文件夹和文件的
2 示例-我们发现,已经不用vars进行代替了,值也可以是其他变量
roles/comm_mysql/defaults/main.yml
---
mysql_version: "5.7.30"
mysql_pkg_path: "/opt/software"
mysql_install_path: "/usr/local"
mysql_bin_file: "mysql-boost-{{ mysql_version }}-bin.tar.gz"
3 handlers和notify
   1 hanlers其实算成另一种形式的tasks,主要是用来做触发动作,和task是对齐的
   2 niotify在task里调用,调用名为handlers的task_name
经典场景就是:当配置文件更改需要重启服务时
案例
- name: stup web server
hosts: dev
tasks:- name: copy apache index.html
copy:
src: index.html
dest: /var/www/html/index.html
notify:
- restart httpd  # 调用handler,只有在该Task状态为Change时才会触发Handler。

handlers:
- name: restart httpd
service:
name: httpd
enabled: true
state: restarted

4  合并

1 shell命令合并 &&

2  可以采用{{item}} loop 创建文件文件夹 YUM安装(后续补充验证) 

原文地址:https://www.cnblogs.com/danhuangpai/p/15789297.html