ansible debug 与变量

发布时间 2023-03-28 11:05:32作者: 橘子飞飞

一、debug 模块

  debug 调试模块:

  msg: 打印自定义消息
  var: 要调试的变量名,与msg 选项互斥,只能用一个;
  verbosity: 一个控制调试运行时的数字,如果设置为3;

  msg 的使用:

---
            - name: 变量引用
              hosts: host

              tasks:
                - name: "命令行变量引用"
                  debug:
                    msg: print param name value:{{name}}

  命令行执行的结果:

root@master:/home/user1# ansible-playbook -i ansible_host -e name=lsis test2.yml
            [WARNING]: Found variable using reserved name: name

            PLAY [变量引用] *********************************************************************************************************************************************************
            TASK [Gathering Facts] **********************************************************************************************************************************************
            ok: [192.168.108.23]
            ok: [192.168.108.22]

            TASK [命令行变量引用] ******************************************************************************************************************************************************
            ok: [192.168.108.22] => {}

            MSG:
            print param name value:lsis

 

var 变量使用

测试debug 模块的var 变量使用,需要将其在前面保存,后面在进行打印出出来;

- name: 变量引用
          hosts: host

          tasks:
            - name: "命令行变量引用,使用msg"
              debug:
                msg: print param name value:{{name}}
            - name: "命令行变量引用,使用var"
              shell: echo "{{name}}"
              register: echo_name
            - debug:
                var: echo_name

二、变量

1、命令行变量

如:

        ---
        - name: 变量引用
          hosts: host

          tasks:
            - name: "命令行变量引用,使用msg"
              debug:
                msg: 
                  - print param name value:{{name}}  msg debug 模块的使用;
                  - print param age value:{{age}}
            - name: "命令行变量引用,使用var"
              shell: echo "{{name}}"
              register: echo_name                    msg var 变量模块的使用;
            - debug:
                var: echo_name


命令行使用为: ansible-playbook -i ansible_host -e name=lsis -e age=20 test_var.yml
在这里的命令需要给定所有play 里面的参数;
注意:

  在多个参数的时候,每个参数前面均需添加-e 参数;

2、hosts 文件中定义变量

主机变量 可称为局部变量
主机组变量 可称为全局变量

注意:
  1、主机变量等级高于主机组变量,即:当主机与主机组中定义了同名的变量,在使用的过程中会使用主机变量;
  2、执行playbook时候通过参数-e传入变量,这样传入的变量在整个playbook中都可以被调用属于全局变量;
  如:
  test_var.yml,文件内容:

---
        - name: 变量引用
          hosts: all

          tasks:
            - name: "host 文件的变量"
              debug:
                msg:
                  - "host 文件的单个主机变量: {{name}}"
                  - "host 文件的主机组变量:{{name}}"

  ansible_host,文件内容:

[host]
        192.168.108.22
        192.168.108.23 name=zhangsan2
        [server:children]
        host
        [server:vars]
        name=lisi

  命令行执行命令查看结果:

  

root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C

        PLAY [变量引用] *********************************************************************************************************************************************************

        TASK [Gathering Facts] **********************************************************************************************************************************************
        ok: [192.168.108.22]
        ok: [192.168.108.23]

        TASK [host 文件的变量] ***************************************************************************************************************************************************
        ok: [192.168.108.22] => {}

        MSG:
        ['host 文件的单个主机变量: lisi', 'host 文件的主机组变量:lisi']
        ok: [192.168.108.23] => {}
        MSG:
        ['host 文件的单个主机变量: zhangsan2', 'host 文件的主机组变量:zhangsan2']

3、在playbook 中定义变量

编写playbook时,直接在里面定义变量,然后直接引用,可以定义多个变量;
注意:
  1、如果在执行playbook时,又通过-e参数指定变量的值,那么会以-e参数指定的为准

如:test_var 文件内容:

    ---
            - name: 变量引用
              hosts: all
              vars:
                dir: /home/user1
                method: create

              tasks:
                - name: var_play "变量引用"
                  debug:
                    msg: "获取play book 中定义的变量,dir: {{dir}},method:{{method}}"
                

脚本执行结果:

root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C -e method=delete

            PLAY [变量引用] *********************************************************************************************************************************************************
            TASK [Gathering Facts] **********************************************************************************************************************************************
            ok: [192.168.108.23]
            ok: [192.168.108.22]
            TASK [var_play "变量引用"] **********************************************************************************************************************************************
            ok: [192.168.108.22] => {}
            MSG:
            获取play book 中定义的变量,dir: /home/user1,method:delete
            ok: [192.168.108.23] => {}
            MSG:

获取play book 中定义的变量,dir: /home/user1,method:delete
结果显示的method 变量选择了在命令行通过-e 传入的值,dir变量直接使用play book 中定义值;

4、setup 变量使用

setup属于一个模块
如:test_var.yml

---
        - name: 变量引用
          hosts: all
          tasks:
            - name: "引用setup 变量,即系统默认模块"
                debug:
                  msg: "setup 模块的变量.ansible_fqdn.log : {{ansible_fqdn}}.log"

命令行执行脚本:

root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml
            PLAY [变量引用] *********************************************************************************************************************************************************
            TASK [Gathering Facts] **********************************************************************************************************************************************
            ok: [192.168.108.22]
            ok: [192.168.108.23]
            TASK [引用setup 变量,即系统默认模块] *******************************************************************************************************************************************
            ok: [192.168.108.22] => {}
            MSG:
            setup 模块的变量.ansible_fqdn.log : node1.log
            ok: [192.168.108.23] => {}
            MSG:
            setup 模块的变量.ansible_fqdn.log : node2.log

5、在单独在文件中定义变量

为了方便管理将所有的变量统一放在一个独立的变量YAML文件中,playbook文件直接引用文件调用变量即可。
在playbook 中引用变量文件的文件格式:vars_files:./var.yml
如:test_vars.yml

  

---
        - name: 变量引用
          hosts: all
          vars_files: ./define_var.yml
          tasks:
            - name: "调用定义变量的外部文件"
              debug:
                msg: "外部文件的变量值: protocol:{{protocol}},port:{{port}},timeout:{{timeout}}"

外部yml中定义变量:

protocol: http
port: 80
timeout: 20

 执行命令结果:

root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C
            [WARNING]: Found variable using reserved name: port

            PLAY [变量引用] *********************************************************************************************************************************************************
            TASK [Gathering Facts] **********************************************************************************************************************************************
            ok: [192.168.108.22]
            ok: [192.168.108.23]
            TASK [调用定义变量的外部文件] **************************************************************************************************************************************************
            ok: [192.168.108.22] => {}
            MSG:
            外部文件的变量值: protocol:http,port:80,timeout:20
            ok: [192.168.108.23] => {}

            MSG:
            外部文件的变量值: protocol:http,port:80,timeout:20

            PLAY RECAP **********************************************************************************************************************************************************
            192.168.108.22             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
            192.168.108.23             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0