文章目录
- 一、Ansible的常量(内置的变量)有哪些
- ???????????????????????????
- 二、Ansible的变量的使用
- 在主机清单文件中定义变量(不推荐)
- 在bash中之间定义变量(不推荐)
- 在剧本中定义变量(不推荐)
- `vars`方式
- `vars_files`方式
- bash中定义变量、`vars`和`vars_files`同时定义相同变量谁的优先级高?
- 在/etc/ansible/host_vars目录和/etc/ansible/group_vars目录中定义变量(!!推荐!!)
- 简述:
- 为什么推荐使用这两种方式
- 内容:
- 在/etc/ansible/host_vars目录中定义变量
- 在/etc/ansbile/group_vars目录中定义变量
- 两种方式定义相同变量时,谁的优先级高
- 以上所有的定义变量的方式谁的优先级高?
- Ansible变量注册`register`
- 什么是`register`为什么使用`register`
- 如何使用`register`
一、Ansible的常量(内置的变量)有哪些
???????????????????????????
二、Ansible的变量的使用
在Ansible中,变量可以分为多个类别,主要包括:
主机变量(Host Variables):特定于主机的变量,可以在 inventory 文件中定义。
组变量(Group Variables):针对主机组定义的变量,通常在
group_vars
目录中。Playbook 变量:在 playbook 中定义的变量,可以在
vars
部分声明。Facts:通过 Ansible 收集的关于主机的信息,使用
setup
模块自动收集。临时变量:在任务中定义的临时变量,使用
set_fact
模块。环境变量:可以通过
env
变量获取。注册变量:通过任务的结果注册的变量,可以使用
register
关键字。Jinja2 变量:使用 Jinja2 模板语法定义和处理的变量。
Playbook 参数:通过命令行传递给 playbook 的变量,使用
--extra-vars
。默认变量:角色中的
defaults/main.yml
文件中定义的变量。这些变量可以在任务、模板和其他地方使用,提供灵活的配置选项。
在主机清单文件中定义变量(不推荐)
[rsync:children]
web_servers
nfs_servers
backup_servers
[web_servers]
...
[web_servers:vars]
id=777
user=ooo
[nfs_servsers]
...
[backup_servers]
...
调用测试:
- 错误调用:
---
- name: the play to test the inventory variables
hosts: web_servers
become: no
tasks:
- name: task1
debug:
# 下面的msg的内容是错误书写:
msg: "web_servers conent: id:{{web_servers.id}}, user:{{web_servsers.user}}"
会报错:
- 正确调用:
---
- name: the play to test the inventory variables
hosts: web_servers
become: no
tasks:
- name: task1
debug:
# 下面的msg的内容是正确书写:
msg: "vars defined in web_servers have: id:{{id}}, user:{{user}}"
在bash中之间定义变量(不推荐)
ansible-playbook -e 'user=kk' -e 'id=888'
在剧本中定义变量(不推荐)
vars
方式
---
- name: the play1
hosts: xxx
become: no
vars:
packages1:
- redis
- tomcat
tasks:
- name: task1
yum:
name: {{packages1}}
# name: "{{packages}}"不加引号可以吗??????????
state: present
vars_files
方式
# 创建含有变量的文件
vim ansbile_vars.txt
# vim中写入以下内容:
vars:
packages1:
- redis
- tomcat
调用测试:
---
bash中定义变量、vars
和vars_files
同时定义相同变量谁的优先级高?
bash方式 > vars _files > vars
测试:
---
- name: the play1
hosts: web_servers
become: no
# 定义一个user变量
tasks:
在/etc/ansible/host_vars目录和/etc/ansible/group_vars目录中定义变量(!!推荐!!)
简述:
为什么推荐使用这两种方式
内容:
-
host_vars目录:
定义单个主机的变量 -
group_vars目录:
定义主机组的变量
在/etc/ansible/host_vars目录中定义变量
# 单独为web01主机定义变量,文件名必须和DNS解析的主机名(这里是web01)相同
vim /etc/ansbile/host_vars/web01
# 进入vim写入:
user:web01_user
id:4443
# 单独为web02主机定义变量,文件名必须和DNS解析的主机名(这里是web02)相同
vim /etc/ansible/host_vars/web02
# 进入vim写入:
user:web02_user
id:4444
测试调用:
---
- name: the play1
hosts: web_servers
become: no
tasks:
- name: the task1
user:
name: "{{user}}"
uid: "{{id}}"
state: present
# 尽管变量名相同,但效果是会为web01和web02各自创建不同的user
在/etc/ansbile/group_vars目录中定义变量
# 为主机组创建统一的变量,文件名必须与定义的主机组名相同
vim /etc/ansible/group_vars/web_servers
# vim写入:
user:group_uni_user
id: 4449
两种方式定义相同变量时,谁的优先级高
host_vars > group_vars
测试:
以上所有的定义变量的方式谁的优先级高?
1、命令行方式
2、host_vars方式
3、group_vars方式
4、playbook中vars_files方式
5、playbook中vars方式
6、主机清单方式
Ansible变量注册register
什么是register
为什么使用register
如何使用register
---
- name: the play1
hosts: xxx
become: no
tasks:
- name: task1
shell: 'date'
- name: task2
debug:
msg: "{{date.stdout}}"