打印playbook变量
var01.yaml
---
- hosts: ubuntu
vars:
foo: bar
tasks:
# Prints "Variable 'foo' is set to bar".
- debug: msg="Variable 'foo' is set to {{ foo }}"
打印文件中的变量
var02.yaml
---
- hosts: ubuntu
vars_files:
vars.yaml
tasks:
# Prints "Variable 'foo' is set to bar".
- debug: msg="Variable 'foo' is set to {{ foo }}"
vars.yaml
---
foo: bar
Ansible的内置环境变量
Ansible的内置环境变量,用setup模块可以查看到
这种语法是Ansible提供的一种“优先级”机制,用于指定一个文件列表,Ansible将根据顺序加载第一个存在的文件,而不会加载多个文件。具体来说,它的工作原理如下:
工作原理:
- Ansible会按顺序检查列表中的文件,并加载第一个找到的文件。
- 如果第一个文件存在且可以加载,Ansible会立即停止检查后续文件。
- 如果第一个文件不存在或无法加载,Ansible会继续检查下一个文件,直到找到一个存在的文件为止。
[ "apache_{{ ansible_os_family }}.yml", "apache_default.yml" ]
的写法是为了在多个文件中,依次从左到右选择一个最合适的加载,而不是同时加载多个文件。这是为了避免变量覆盖或冲突,并确保使用最优配置。
这种写法会确保两个文件(如果存在)都会被加载
var03.yaml
---
- hosts: ubuntu
vars_files:
- [ "apache_{{ ansible_os_family }}.yml", "apache_default.yml" ]
tasks:
- service: name={{ apache }} state=restarted
host_vars和group_vars变量
mkdir -p /etc/ansible/hosts_vars
vim /etc/ansible/hosts_vars/107.151.199.209
---
foo: bar
baz: qux
mkdir -p /etc/ansible/group_vars
vim /etc/ansible/group_vars/ubuntu
---
tar: zar
ping: pong
var04.yaml
---
- hosts: ubuntu
#debug 打印多个变量,host_vars和group_vars是默认加载的
tasks:
- name: debug vars
debug:
msg:
#打印主机变量
- "{{ foo }}"
- "{{ baz }}"
#打印主机组变量
- "{{ tar }}"
- "{{ ping }}"
注册变量,数组变量
数组变量,这里写入到/etc/ansible/group_vars/ubuntu
foo_list:
- one
- two
- three
读取列表的第一个变量
foo[0]
foo|first
打印ansible内置变量
hostvars
: 从一台远程主机上获取另一台远程主机的变量信息,变量hostvars包含了指定主机上所定义的所有变量
var05.yaml
---
- hosts: ubuntu
tasks:
- name: get time
command: date +"%Y-%m-%d %H:%M:%S"
register: date_fmt
- name: print time
debug:
var: date_fmt.stdout
#打印变量要使用"{{}}",可以保证稳定读取
- name: print time
debug:
msg: "{{ date_fmt.stdout }}"
- name: print time
debug:
msg: "{{ date_fmt.stdout }}"
- name: print foo_list first name with Python语法格式
debug:
msg: "{{ foo_list[0] }}"
- name: print foo_list first name with Jinja2语法
debug:
msg: "{{ foo_list|first }}"
- name: print Ansible built-in vars ansible_eth0
debug:
msg: "{{ ansible_eth0.ipv4.address }}"
- name: print Ansible built-in vars ansible_eth0 #推荐使用 ansible_eth0['ipv4']['address']
debug:
msg: "{{ ansible_eth0['ipv4']['address'] }}"
- name: print Ansible built-in vars ansible_eth0 #hostvars 打印网络接口控制器
debug:
msg: "{{ hostvars['107.151.199.209']['ansible_eth0']['pciid'] }}"
ansible 常用的变量
groups
: 包含了所有Hosts文件里主机组的一个列表
group_names
: 包含了当前主机所在的所有主机组名的一个列表
inventory_hostname
: 通过Hosts文件定义主机的主机名(与ansible_home不一定相同)
inventory_hostname_short
: 主机端口
play_hosts
: 所有主机
ansible_os_family
: 系统类型
ansible_hostname
: 主机名称
ansible_memtotal_mb
: 内存大小
这些变量通过与when语句的判断条件一起,来决定下一步的操作
var06.yaml
---
- hosts: ubuntu
tasks:
- name: print vars
debug:
msg:
- "groups: {{groups}}"
- "group_names: {{group_names}}"
- "inventory_hostname: {{inventory_hostname}}"
- "inventory_hostname_short: {{inventory_hostname_short}}"
- "play_hosts: {{play_hosts}}"
- "ansible_os_family: {{ansible_os_family}}"
- "ansible_hostname: {{ansible_hostname}}"
- "ansible_memtotal_mb: {{ansible_memtotal_mb}}"
#打印变量要使用"{{}}",可以保证稳定读取
标签:name,vars,ansible,debug,foo,变量
From: https://www.cnblogs.com/anyux/p/18361943