第 6 章 Playbook变量定义与使用

第 6 章 Playbook变量定义与使用

变量可以通过以下6种方法进行定义:

1.命令行

2.在Inventory中定义

3.在Playbook中定义

4.在Roles中定义

5.注册变量(register)

6.系统信息变量(facts)

1.命令行 引入变量

创建一个playbook脚本

#var.yml
---
- hosts: abc
  gather_facts: no
  remote_user: root
  tasks:
  - name: test var
    debug:
      msg: "{{ work_dir }}"

  

通过命令传入变量参数:传入变量使用-e参数:

[root@CentOS7 test]# ansible-playbook var.yml -e work_dir=/usr/local

PLAY [abc] ************************************************************************************************************
TASK [test var] *******************************************************************************************************
ok: [142.4.123.13] => {
    "msg": "/usr/local"
}
ok: [47.241.90.203] => {
    "msg": "/usr/local"
}

2.在Inventory中定义

在之前主机清单那节中演示过添加变量,已下仅作为回顾

主机清单变量引用

单个主机变量引用   http_port=80

例如:

[web]

192.168.0.13 ansible_ssh_user=root ansible_ssh_pass=123.com  http_port=80

192.168.0.14 ansible_ssh_user=root ansible_ssh_pass=123.com

输出变量:

[root@ansible~]# ansible 192.168.0.13 -a "echo {{http_port}}"

整个主机组变量引用(在主机组web的基础上定义)

方法一:在主机清单中直接定义:

[web:vars]

http port= 8080

server_name=www.ctnrs.com 

输出变量:

[root@ansible~]# ansible web -a "echo {{http_port}}"

192.168.0.13 | SUCCESS | rc=0 >> 
8080
192.168.0.14 | SUCCESS | rc=0>>
8080

[root a ansible~] # ansible web -a "echo{{server_name}}"

192.168.0.13 | SUCCESS | rc=0 >> 
www.ctnrs.com
192.168.0.14 | SUCCESS | rc=0>>
www.ctnrs.com

方法二:在ansible下创建目录group_vars:

mkdir /etc/ansible/group_vars

vim /etc/ansible/group_vars/web.yml (文件名需要跟组名相同)

http_port: 8080

server_name: www.longtao.vip

注意:冒号后有空格再跟参数。

3.在Playbook中定义

示例:

---
- hosts: abc
  gather_facts: no
  remote_user: root
  vars:
    - work_dir: /usr/local
    - nginx_version: 1.15
  tasks:
  - name: test var
    debug:
      msg: "{{ work_dir }}/nginx{{nginx_version}}"

效果:

[root@CentOS7 test]# ansible-playbook var.yml

PLAY [abc] ************************************************************************************************************
TASK [test var] *******************************************************************************************************
ok: [142.4.123.13] => {
    "msg": "/usr/local/nginx1.15"
}
ok: [47.241.90.203] => {
    "msg": "/usr/local/nginx1.15"
}

4.在Roles中定义

后面再讲roles使用时会单独 讲

5.注册变量(register)

将某一个执行某个任务的结果保存到变量中,这样能够动态获取一个变量。

示例:获取时间并生成目录

---
- hosts: abc
  gather_facts: no
  remote_user: root
  tasks:
  - name: register var
    command: date +"%F_%T"
    register: datetime
  - name: create dir
    file:
      dest: "/tmp/{{datetime.stdout}}"
      state: directory

需注意你定义的注册变量内会有很多值,这里使用datetime.stdout只是其中一个值,

使用debug: msg={{datetime}}  可以输出全部值如下:

ok: [142.4.123.13] => {
    "msg": {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "cmd": [
            "date",
            "+%F_%T"
        ],
        "delta": "0:00:00.003659",
        "end": "2021-08-18 23:16:26.303546",
        "failed": false,
        "rc": 0,
        "start": "2021-08-18 23:16:26.299887",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "2021-08-18_23:16:26",
        "stdout_lines": [
            "2021-08-18_23:16:26"
        ]
    }
}

6.系统信息变量(facts)

注意如果playbook脚本中需要定义gather_facts启用

gather_facts: yes

系统提供了哪些系统信息变量通过setup模块查看:

ansible -i /etc/ansible/hosts web -m setup

提供一个简单示例:

---
- hosts: web
  gather_facts: yes
  remote_user: root
  
  tasks:
  - name: get hostname
    debug: msg="主机名:{{ansible_nodename}}"
  - name: get ipv4
    debug: msg="IPv4:{{ansible_all_ipv4_addresses}}"
  - name: get ipv6
    debug: msg="IPv6:{{ansible_all_ipv6_addresses}}"
  - name: get mem
    debug: msg="内存:{{ansible_memory_mb.real}}"
  - name: get dns
    debug: msg="DNS:{{ansible_dns.nameservers}}"

版权声明:
作者:WaterBear
链接:https://l-t.top/2023.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录