变量简单介绍
Ansible支持使用变量来存储值,并在Ansible项目的文件中重复使用
利于项目的创建和维护,减少错误 变量这个东西的嘛 大家都懂 就是x=y
变量可能包含以下
要创建的用户
要安装的软件包
要重新启动的服务
要删除的文件
要从互联网检索的存档
变量的命名规范
1.必须以字母开头,可以包括字母数字下划线
2.分为 三个范围
全局范围(在命令行或者ansible配置设置的变量)
Play范围(play和相关结构中设置的变量)
主机范围:(由清单事实收集或注册的任务,在主机组和个别主机上设置的变量)
定义变量的方式
1.放在playbook开头的vars模块当中
简单举个栗子
- hosts: all
vars:
user: joe
home: /home/joe
2.在外部文件中定义playbook变量,此时不使用vars模块 转而使用vars_file
还是简单的举个栗子
- hosts: all
vars_file:
- vars/users.yml
而后可以可以在这些文件中定义playbook的变量
user: joe
home: /home/joe
3.放在命令行中的变量 使用 -e
ansible-playbook main,yml -e "package=apache"
4.使用数组作为变量
给出一个例子
users:
bjones:
first_name: Bob
last_name: Jones
home_dir: /users/bjones
acook:
first_name: Anne
last_name: Cook
home_dir: /users/acook
当要访问其中的值的时候可以
1.users.bjones.first_name
2.users['bjones']['first_name']
在playbook中使用变量
使用符号{{ }} 其中的变量会被替换其值
注意 当引用变量时如果其是开始的第一个元素 必须使用“”
也就是 - "{{user}}"
主机变量和组变量
主机变量:应用于特定主机
组变量:应用于特定的主机组或一组主机组中的所有主机
主机变量优先于组变量
但playbook中定义的变量的优先级比这两个都要高
#定义主机变量
[servers]
domo.example.com ansible_user=joe
主机组 变量
#定义servers主机组的组变量
[servers]
demo1.example.com
demo2.example.com
[servers:vars]#定义组变量
user=joe
#定义多个组的组变量
[server1]
demo1.example.com
demo2.example.com
[server2]
demo3.example.com
demo4.example.com
[servers:children]
server1
server2
[servers:vars]
user=joe
虽然推荐是直接再工作目录创建文件放置变量文件
文件中的变量和playbook中的内容语法一致
对于运行语句之后 比如playbook
产生的输出结果可以被管理员使用 register语句捕获 保存在一个临时变量中
可用于调试或者特定的配置
本章实验——管理变量
![](https://img-blog.csdnimg.cn/img_convert/5ab4fd073b54ad9ba4956fa215ce1367.png)
实验开始 lab data-variables start
首先去往工作目录 cd ~/data-variables
创建文件playbook.yml 并编写内容
---
- name: deploy and start apache HTTPD service
host: webserver
vars:
web_pkg: httpd
firewall_pkg: firewalld
web_service: httpd
firewall_service: firewalld
python_pkg: python3-PyMySQL
rule: http
tasks:
- name: required packages are installed and up to date
yum:
name:
- "{{web_pkg}}"
- "{{firewall_pkg}}"
- "{{python_pkg}}"
state: latest
- name: The {{firewall_service}} service is started and enabled
service:
name: "{{ firewall_service }}"
enabled: true
state: started
- name: The {{web_service}} service is started and enabled
service:
name: "{{ web_service }}"
enabled: true
state: started
- name: web content is in place
copy:
content: "Example web content"
dest: /var/ww/html/index.html
- name: The firewall port for {{ rule }} is open
firewalld:
service: "{{ rule }}"
permanent: true
immediate: true
state: enabled
- name: verify the apache sevice
hosts: localhost
become: false
tasks:
- name: ensure the webserver is reachable
uri:
url: http://servera.lab.example.com
status_code: 200
语法检查 ansible-playbook playbook.yml --syntax-check
执行文件 ansible-playbook playbook.yml
等着结果呗
实验完成 lab data-variables finish