# Ansible Variables

# 1. Ansible Variables

# 1.1 什么是变量

变量提供了便捷的方式来管理 ansible 项目中的动态值。 比如 nginx-1.12,可能后期会反复的使用到这个版本的值,那么如果将此值设置为变量,后续使用和修改都将变得非常方便。

# 1.2 变量定义的方式

在 Ansible 中定义变量分为如下三种方式:

  • 1. 通过命令行传递变量参数定义

  • 2. 在 play 文件中进行定义变量

    • 2.1) 通过 vars 定义变量

    • 2.2) 通过 vars_files 定义变量

  • 3. 通过 inventory 在主机组或单个主机中设置变量

    • 3.1) 通过 host_vars 对主机进行定义

    • 3.2) 通过 group_vars 对主机组进行定义

问题:如果定义的变量出现重复,造成冲突,如何解决?

# 1.3 在 Playbook 中定义变量
# 1.3.1 vars 方式定义变量

在 playbook 的文件中开头通过 vars 关键字进行变量定义

[root@manager ~]# cat var1.yml 
- hosts: webservers
  vars: 
    - web_packages: httpd_2
    - ftp_packages: vsftpd_2
  tasks:
    - name: Output Vaiables
      debug: 
        msg: 
          - ""
          - ""
# 1.3.2 vars_files 方式定义变量

在 playbook 中使用 vars_files 指定文件作为变量文件,好处就是其他的 playbook 也可以调用;

1.png

1. 准备一个用于存储变量的文件,后缀为 .yml 文件内容:vars_name: value

[root@manager ~]# cat var.yml 
ansible_cfg: /etc/ansible/ansible.cfg
ansible_exe: /usr/bin/ansible/sbin/ansible
ansible_vars: playbook_vars_files

2. 使用 Playbook 调用变量文件

[root@manager ~]# cat var1.yml 
- hosts: webservers
  vars: 
    - web_packages: httpd_2
    - ftp_packages: vsftpd_2
  vars_files: 
    - ./var.yml
  tasks:
    - name: Output Vaiables
      debug: 
        msg: 
          - ""
          - ""
          - ""
          - ""
          - ""
# 1.4 在 Inventory 中定义变量
# 1.4.1 Inventory 文件中定义变量

1. 设定主机变量和组变量

[root@manager ~]# cat /etc/ansible/hosts
[webservers]
192.168.1.7 priority=100 state=master
192.168.1.8 priority=50 state=backup
[webservers:vars]
port=80  # 组变量

2.playbook 调用变量

[root@manager ~]# cat var3.yml 
- hosts: webservers
  tasks:
    - name: Output Vaiables
      debug: 
        msg: 
          - "  "

3.playbook 执行结果

[root@manager ~]# ansible-playbook var3.yml 
PLAY [webservers] ********************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [192.168.1.7]
ok: [192.168.1.8]
TASK [Output Vaiables] ***************************************************************************************************************
ok: [192.168.1.7] => {
    "msg": [
        "100 master 80"
    ]
}
ok: [192.168.1.8] => {
    "msg": [
        "50 backup 80"
    ]
}
PLAY RECAP ***************************************************************************************************************************
192.168.1.7                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.1.8                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
# 1.4.2 使用 host_vars 定义变量

1. 在项目目录中创建 host_vars 目录,然后在创建一个文件,文件的文件名称要与 inventory 清单中的主机名称要保持完全一致,如果是 ip 地址,则创建相同 ip 地址的文件即可。

[root@manager project]# cat /etc/ansible/hosts 
[webservers]
192.168.1.7
192.168.1.8
[root@manager project]# mkdir host_vars

2. 在 host_vars 目录中创建文件,给 192.168.1.7、 192.168.1.8 主机定义变量

[root@manager project]# cat host_vars/192.168.1.7
state: MASTER
priority: 200
[root@manager project]# cat host_vars/192.168.1.8
state: BACKUP
priority: 100

3. 准备一个 playbook 文件调用 host_vars 目录中定义的主机变量

[root@manager project]# cat var4.yml 
- hosts: webservers
  tasks:
    - name: Copy Keeplaived Configure 
      template:
        src: ./keepalived.conf.j2
        dest: /tmp/keepalived.conf

4. 准备 playbook 中配置文件 keepalived.conf.j2

[root@manager project]# cat keepalived.conf.j2 
vrrp_instance VI_1 {
    state <!--swig10--> 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 50            # 当前虚拟路由标识,VRID;
    priority <!--swig11-->
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }

5. 执行 playbook 结果

[root@manager project]# ansible-playbook var4.yml 
# web01 执行结果
[root@web01 ~]# cat /tmp/keepalived.conf 
vrrp_instance VI_1 {
    state MASTER 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 50            # 当前虚拟路由标识,VRID;
    priority 200
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }
# web02 执行结果
[root@web02 ~]# cat /tmp/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 50            # 当前虚拟路由标识,VRID;
    priority 100
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }
# 1.4.3 使用 group_vars 定义变量

1. 在项目目录中创建 group_vars 目录,然后在创建一个文件,文件的文件名称要与 inventory 清单中的组名称保持完全一致;

[root@manager project]# cat /etc/ansible/hosts 
[webservers]
192.168.1.7
192.168.1.8
[root@manager project]# mkdir group_vars

2. 在 group_vars 目录中创建 webservers 文件,为 webservers 主机组设定变量;

[root@manager project]# cat group_vars/webservers 
virtual_router_id: 100

3. 编写 playbook,只需在 playbook 文件中使用变量即可;

[root@manager project]# cat var4.yml 
- hosts: webservers
  tasks:
    - name: Copy Keeplaived Configure 
      template:
        src: ./keepalived.conf.j2
        dest: /tmp/keepalived.conf

4. 准备 playbook 中配置文件 keepalived.conf.j2

[root@manager project]# cat keepalived.conf.j2 
vrrp_instance VI_1 {
    state <!--swig12--> 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id <!--swig13-->            # 当前虚拟路由标识,VRID;
    priority <!--swig14-->
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }

5. 执行 playbook 结果

[root@manager project]# ansible-playbook var4.yml 
# web01 执行结果
[root@web01 ~]# cat /tmp/keepalived.conf 
vrrp_instance VI_1 {
    state MASTER 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 100            # 当前虚拟路由标识,VRID;
    priority 200
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }
# web02 执行结果
[root@web02 ~]# cat /tmp/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP 
    interface eth0 eth1             # 绑定当前虚拟路由使用的物理接口;
    virtual_router_id 100            # 当前虚拟路由标识,VRID;
    priority 100
    advert_int 3                    # vrrp 通告时间间隔,默认 1s;
    authentication {
        auth_type PASS              # 密码类型,简单密码;
        auth_pass 1111              # 密码不超过 8 位字符;
    }

6. 测试其他组能否使用 webservers 组中定义的变量;测试后会发现无法调用;

[root@manager project]# cat var4.yml 
- hosts: lbservers
  tasks:
    - name: Copy Keeplaived Configure 
      template:
        src: ./keepalived.conf.j2
        dest: /tmp/keepalived.conf

7. 但是系统提供了特殊的 all 组,也就说在 group_vars 目录下创建一个 all 文件,定义变量对所有的主机组都生效;

#1. 在 group_vars 目录下创建一个 all 文件
[root@manager project]# cat group_vars/all
web_packages: wget
ftp_packages: tree
#2. 编写 playbook 文件
[root@manager project]# cat var6.yml 
- hosts: webservers
  tasks:
    - name: debug
      debug:
        msg: " "
#3. 执行 playbook
[root@manager project]# ansible-playbook var6.yml
# 1.5 执行 Playbook 传递变量

在执行 Playbook 时,可以通过命令行 --extra-vars 或 -e 外置传参设定变量;

1. 准备 playbook 文件

[root@manager project]# cat var5.yml 
- hosts: webserver
  tasks:
    - name: Output Vaiables
      debug:
        msg:
          - ""
          - ""

2. 执行 playbook 时进行变量的传递

[root@manager var]# ansible-playbook var5.yml -e "web_packages=GeoIP"

3. 传递多个外置变量的方式

[root@manager var]# ansible-playbook var5.yml -e "web_packages=GeoIP"  -e "ftp_packages=ftpIP"
# 1.6 变量优先级测试

定义相同的变量不同的值,来测试变量的优先级。操作步骤如下

  • 1)在 plabook 中定义 vars 变量
  • 2)在 playbook 中定义 vars_files 变量
  • 3)在 Inventory_host 中定义变量
  • 4)在 group_vars 中定义变量
  • 5)通过执行命令传递变量

结果: 1️⃣命令行传参 -->2️⃣playbook 中的 vars_files-->3️⃣playbook 中的 vars-->4️⃣ Inventory_host 变量 -->5️⃣group_vars-->6️⃣group_vars/all -->7️⃣ Inventory_group

# 1.7 项目实战将 NFS 项目改造为变量方式

1. 准备 playbook 文件

[root@manager var]# cat nfs_server_variables.yml 
- hosts: webservers
  vars_files: ./nfs_variables.yml
  tasks:
    - name: 1.Installed NFS Server
      yum:
        name: nfs-utils
        state: present
    - name: 2.Configure NFS Server
      template:
        src: ./exports.j2
        dest: /etc/exports
      notify: Restart NFS Server
    - name: 3.Init Group 
      group:
        name: ""
        gid: ""
    - name: 4.Init User
      user:
        name: ""
        uid: ""
        group: ""
        shell: /sbin/nologin
        create_home: no
        
    - name: 5.Init Create Directory
      file:
        path: ""
        state: directory
        owner: ""
        group: ""
        mode: "0755"
    - name: 6.Started NFS Server
      systemd:
        name: nfs
        state: started
        enabled: yes
  handlers:
    - name: Restart NFS Server
      systemd:
        name: nfs
        state: restarted
- hosts: localhost
  vars_files: ./nfs_variables.yml
  tasks:
    - name: Mount 
      mount:
        src: ":"
        path: /mnt
        fstype: nfs
        opts: defaults
        state: mounted

2. 准备 NFS 配置文件 exports.j2

[root@manager var]# cat exports.j2 
<!--swig29--> 172.16.1.0/24(rw,all_squash,anonuid=<!--swig30-->,anongid=<!--swig31-->)

3. 准备 playbook 变量文件

[root@manager var]# cat nfs_variables.yml 
nfs_share_data: /data
nfs_uid: 666
nfs_gid: 666
nfs_user: www
nfs_group: www
nfs_server: 172.16.1.7

4. 执行 playbook 并测试

[root@manager var]# ansible-playbook nfs_server_variables.yml
[root@manager var]# df -h |grep mnt
172.16.1.7:/data   17G   11G  6.5G  62% /mnt

# 2.Ansible Register

# 2.1 什么是 Register

register 可以将 task 执行的任务结果存储至某个变量中,便于后续的引用;

# 2.2 Register 场景示例 1

需求:使用 Register 获取被控节点的端口信息

1. 准备 playbook 文件

[root@manager var]# cat register_1.yml 
- hosts: webservers
  tasks:
    - name: Get Network Port 
      shell: netstat -lntp
      register: System_Port
    - name: debug 
      debug:
        msg: 
          - "执行了  命令"
          - ""

2.playbook 执行结果

[root@manager var]# ansible-playbook register_1.yml

1.jpg

2.jpg

# 2.3 Register 场景示例 2

需求:批量修改 200 台主机名称

1. 准备 playbook 文件

[root@manager var]# cat register_2.yml 
- hosts: webservers
  tasks:
    - name: String
      shell: echo $RANDOM |md5sum | cut -c 2-10
#      shell: echo $((RANDOM%200))
      register: systemd_sj
    - name: debug
      debug:
        msg: ""
    - name: Chanage Hostname
      hostname:
        name: "web_"

2. 执行 playbook 并测试

[root@manager var]# ansible-playbook register_2.yml
[root@web01 ~]# hostnamectl
   Static hostname: web_8ccbbb7ce
         Icon name: computer-vm
           Chassis: vm
        Machine ID: bd353f63eda44afab936db8ef2974eb1
           Boot ID: 63559abc84684641ac245ad94e9c8e55
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-957.el7.x86_64
      Architecture: x86-64

2.4 Register 场景示例 3

需求:使用 register 关键字完成 jumpserver key 的创建

1. 准备 playbook 文件

[root@web01 ~]# cat register_3.yml 
- hosts: webservers
  tasks:
    - name: BOOTSTRAP_TOKEN
      shell: 'if grep "BOOTSTRAP_TOKEN" ~/.bashrc ;then
                echo $BOOTSTRAP_TOKEN;
             else
                BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`;   
                echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;   
                echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN";
             fi'
      register: JMS_BOOTSTRAP_TOKEN
    - name: SECRET_KEY
      shell: 'if grep "SECRET_KEY" ~/.bashrc ;then 
                echo $SECRET_KEY;
             else
                SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`;
                echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;   
                echo "SECRET_KEY=$SECRET_KEY";
             fi'
      register: JMS_SECRET_KEY
    - name: Copy JMS Config.yml
      template:
        src: ./jms.yml
        dest: /tmp/jms.yml
    - name: Copy KoKo Config.yml
      template:
        src: ./koko.yml
        dest: /tmp/koko.yml

2. 准备 playbook 文件配置文件 jms.yml 、koko.yml

#1. 模拟 jms 配置文件
[root@manager var]# cat jms.yml 
SECRET_KEY: <!--swig36-->
BOOTSTRAP_TOKEN: <!--swig37-->
#2. 模拟 koko 配置文件
[root@manager var]# cat koko.yml 
# Jumpserver 项目的 url, api 请求注册会使用
# CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: <!--swig38-->

3. 执行 playbook 并测试

#1. 执行 playbook
[root@manager var]# ansible-playbook register_3.yml 
#2. 验证测试
[root@web01 ~]# cat /tmp/jms.yml 
SECRET_KEY: tuw13bJFHddReo33qHE36xm9dqp8WNlsoScrCyaIiD894kjhIu
BOOTSTRAP_TOKEN: pmEcXW2q7KwVOPUkcbAXoDdu
[root@web01 ~]# cat /tmp/koko.yml 
# Jumpserver 项目的 url, api 请求注册会使用
# CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: pmEcXW2q7KwVOPUkcbAXoDdu

# 3. Ansible Facts Variables

# 3.1 什么是 facts

Ansible facts 变量主要用来自动采集,” 被控端主机 “自身的状态信息。

比如:被动端的,主机名、IP 地址、系统版本、CPU 数量、内存状态、磁盘状态等。

# 3.2 facts 使用场景

1. 通过 facts 变量检查被控端硬件 CPU 信息,从而生成不同的 Nginx 配置文件。

2. 通过 facts 变量检查被控端内存状态信息,从而生成不同的 memcached 的配置文件。

3. 通过 facts 变量检查被控端主机名称信息,从而生成不同的 Zabbix 配置文件。

4. 通过 facts 变量检查被控端主机 IP 地址信息,从而生成不同的 redis 配置文件。

5. 通过 facts 变量........

# 3.3 facts 语法示例

1. 查看所有 facts 变量

[root@manager ~]# ansible localhost -m setup

2. 通过 facts 获取被控端的主机名与 IP 地址,然后通过 debug 输出

[root@manager ~]# cat facts_1.yml 
- hosts: webservers
  #gather_facts: no
  tasks:
    - name: Print IP
      debug:
        msg: "  "

3. 获取 facts 变量,可以使用 filter 过滤特定的关键项

[root@manager ~]# ansible localhost -m setup -a "filter="ansible_fqdn""
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_fqdn": "manager"
    }, 
    "changed": false
}

4. 如果没有使用 facts 变量需求,可以关闭其功能,加速 ansible 执行性能;

[root@manager ~]# cat facts_1.yml 
- hosts: webservers
  gather_facts: no
  tasks:
    - name: Print IP
      debug:
        msg: "  "
# 3.4 案例 1 - 根据主机 IP 地址生成 Redis 配置

1. 编写安装配置 redis 服务的 playbook 文件

[root@manager ~]# cat facts_redis.yml 
- hosts: webservers
  tasks:
    - name: Installed Redis Server
      yum:
        name: redis
        state: present
    - name: Configure Redis Server
      template:
        src: ./redis.conf.j2
        dest: /etc/redis.conf
      notify: Restart Redis Server
    - name: Started Redis Server
      systemd:
        name: redis
        state: started
        enabled: yes
  handlers:
    - name: Restart Redis Server
      systemd:
        name: redis
        state: restarted

2. 准备 playbook 依赖的 redis.conf.j2 文件

[root@manager web_cluster]# cp /etc/redis.conf /root/web_cluster/files/redis.conf.j2
[root@manager files]# sed -i "/^bind 127.0.0.1/c bind 127.0.0.1 " redis.conf.j2

3. 验证测试

[root@web01 ~]# netstat -lntp|grep 6379
tcp        0      0 192.168.1.7:6379        0.0.0.0:*               LISTEN      15391/redis-server  
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      15391/redis-server
# 3.5 案例 2 - 根据主机 CPU 生成 Nginx 配置

1. 编写安装配置 Nginx 服务的 playbook 文件

[root@manager ~]# cat facts_nginx.yml 
- hosts: webservers
  tasks:
    - name: Installed Nginx Server
      yum:
        name: nginx
        state: present
    - name: Configure Nginx nginx.conf
      template:
        src: ./nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: 0644
      notify: Restart Nginx Server
    - name: Started Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes
  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

2. 准备 playbook 依赖的 nginx.conf.j2 文件

[root@manager ~]# cat nginx.conf.j2 
user www;
worker_processes  <!--swig46-->;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$http_x_via"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

3. 验证测试

[root@manager ~]# ansible-playbook facts_nginx.yml
[root@web01 ~]# cat /etc/nginx/nginx.conf  | grep worker_processes
worker_processes  8;
# 3.6 案例 3 - 根据主机内存生成 Memcached 配置

1. 编写安装配置 memcached 服务的 playbook 文件

[root@manager var]# cat facts_memcached.yml 
- hosts: webservers
  tasks:
    - name: Installed Memcached
      yum:
        name: memcached
        state: present
    - name: Configre Memcached
      template:
        src: ./memcached.j2
        dest:  /etc/sysconfig/memcached
      notify: Restart Memcache Server
    - name: Started Memcached
      systemd:
        name: memcached
        state: started
  
  handlers:
    - name: Restart Memcache Server
      systemd:
        name: memcached
        state: restarted

2. 准备 playbook 依赖的 memcached.j2 文件

[root@manager var]# cat memcached.j2 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="NaN"
OPTIONS=""

3. 验证测试

[root@manager var]# ansible-playbook facts_memcached.yml
[root@web_8ccbbb7ce ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         351        1029          27         439        1300
Swap:          2047           0        2047
[root@web_8ccbbb7ce ~]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="909.5"
OPTIONS=""
# 3.7 案例 6 - 使用 facts 批量修改主机名
[root@manager var]# cat facts_hostname.yml 
- hosts: webservers
  tasks:
    - name: Print IP
      debug:
        # 获取facts变量,然后提取IP地址,以.结尾的最后一列
        msg: "{{ ansible_eth0.ipv4.address.split('.')[-1] }}"

    - name: Change Hostname
      hostname:
        name: web_{{ ansible_eth0.ipv4.address.split('.')[-1] }}
# 3.8 facts 变量性能优化
# 3.8.1 关闭 facts 采集加速执行 - 方式 1

1. 编写 TASK 任务 sleep10 秒,针对 15 台机器同时执行,需要消耗的时间大概是 1m56.980s

[root@manager var]# cat facts_sleep.yml 
- hosts: all
  #gather_facts: no 
  tasks:
    - name: sleep 10
      command: sleep 10

2. 使用 gather_facts: no 关闭 facts 信息采集,发现仅花费了 0m38.164s ,整个速度提升了 3 倍;

[root@manager var]# cat facts_sleep.yml 
- hosts: all
  gather_facts: no 
  tasks:
    - name: sleep 10
      command: sleep 10
# 3.8.2 缓存 facts 变量加速执行 - 方式 2

1. 当我们使用 gather_facts: no 关闭 facts,确实能加速 Ansible 执行,但是有时候又需要使用 facts 中的内容,还希望执行的速度快一点,这时候可以设置 facts 的缓存;

[root@manager var]# yum install python-pip -y
[root@manager var]# pip install redis
[root@m01 ~]# cat /etc/ansible/ansible.cfg
[defaults]
# smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts
# implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False;
# explicit 则表示默认不收集,要显式收集,必须使用 gather_facts: Ture。
gathering = smart #在使用 facts 缓存时设置为 smart
fact_caching_timeout = 86400
fact_caching = redis
fact_caching_connection = 172.16.1.41:6379
# 若 redis 设置了密码,1 表示 redis1 号库
# fact_caching_connection = 172.16.1.41:6379:1:passwd

2. 编写 Playbook 测试;

[root@manager var]# cat facts_sleep.yml 
- hosts: all
  gather_facts: no 
  tasks:
    - name: sleep 10
      command: sleep 10

3. 测试结果如下:

  • 执行第一次花费了 1m49.881s 因为第一次需要将 facts 信息缓存至 Redis
  • 执行第二次花费了 0m38.130s 可以看出使用 Redis 缓存 facts 变量,整体执行时间提高了 3 倍
此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝