文章目录
- 一、Ansible特殊模块
- 1.1、setup模块
- 1.2、debug模块
- 二、定义变量的方法
- 2.1、Inventory变量(在主机清单配置文件中定义变量)。
- 2.2、Host Facts变量(可以直接调用ansible收集的系统信息)
- 2.3、Playbook变量(使用vars关键词可以在playbook内定义变量)。
- 2.4、Playbook提示变量(根据提示输入变量的值)。
- 2.5、单独定义个变量文件,在playbook中用vars_files调用该文件。
- 2.6、执行ansible-playbook命令时使用-e参数定义变量
一、Ansible特殊模块
1.1、setup模块
ansible_facts用于采集被管理设备的系统信息,所有收集的信息都被保存在变量中,每次执行playbook默认第一个任务就是Gathering Facts,使用setup模块可以查看收集到的facts信息。
[root@control ansible]# ansible test -m setup
192.168.4.10 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
… 省略部分内容…
- 常用的变量
ansible_all_ipv4_addresses | IP地址 |
---|---|
ansible_bios_version | 主板BIOS版本 |
ansible_memtotal_mb | 总内存 |
ansible_hostname | 主机名 |
ansible_fqdn | 主机的域名 |
ansible_devices.sda.partitions.sda1.size | 某个磁盘分区的大小 |
1.2、debug模块
debug模块可以显示变量的值,可以辅助排错,通过msg可以显示变量的值,变量需要使用{{}}扩起来。
[root@control ansible]# vim ~/ansible/debug.yml
---
- hosts: test
tasks:
- debug:
msg: "主机名是:{{ ansible_hostname }}"
- debug:
msg: "总内存大小:{{ ansible_memtotal_mb }}"
#备注调用debug模块显示某些具体的变量值
#debug模块可以显示变量的值,可以辅助排错
二、定义变量的方法
Ansible支持十几种定义变量的方式。
下面是根据优先级排序的定义方式:
- Inventory变量
- Host Facts变量
- Playbook变量
- Playbook提示变量
- 变量文件
- 命令行变量
2.1、Inventory变量(在主机清单配置文件中定义变量)。
[root@control ansible]# vim ~/ansible/inventory
[test]
node1 iname="nb"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
iname="dachui"
#备注,在node1主机后面给该主机添加变量iname,值为nb.
#给webserver组定义变量,vars是关键词不可以改变,webserver是上面定义的组
#给这个组定义变量iname="dachui"
下面编写剧本调用刚才的变量:(在剧本中需要调用变量是要使用{{}})
[root@control ansible]# vim ~/ansible/inventory_var.yml
---
- hosts: node1,webserver #定义需要远程管理的主机是谁
tasks: #剧目要完成哪些任务
- name: create a user with var. #剧目中的第一个任务描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #需要创建的用户名是iname这个变量
#注意事项:
#在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
#如果是在后面或者中间位置调用变量{{}}外面可以不加双引号
#如:
# "{{ iname }}"
# nihao {{ iname }}
2.2、Host Facts变量(可以直接调用ansible收集的系统信息)
[root@control ansible]# vim ~/ansible/facts_var.yml
---
- hosts: test
tasks:
- name: create user.
user:
name: "{{ansible_hostname}}"
#定义剧本,远程所有被管理主机,调用user模块,创建用户
#需要创建的用户名ansible_hostname是一个ansible_facts变量
#验证: 到node1主机查看是否有一个与主机名同名的用户
2.3、Playbook变量(使用vars关键词可以在playbook内定义变量)。
[root@control ansible]# vim ~/ansible/playbook_var.yml
---
- hosts: test
vars: #vars是关键词,用来定义变量用的
iname: heal #具体变量名是iname,值是heal
ipass: '123456' #再定义一个变量名是ipass,值是123456
#注意密码必须是字符串,需要引号
tasks: #tasks定义需要执行的任务
- name: Use variables create user. #给任务写个描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #用户名的是前面定义的变量
password: "{{ ipass | password_hash('sha512') }}"
#密码是前面定义好的ipass,管道给password_hash把密码加密.
2.4、Playbook提示变量(根据提示输入变量的值)。
[root@control ansible]# vim ~/ansible/prompt_var.yml
---
- hosts: test
vars_prompt: #vars_prompt是关键词,定义提示变量
- name: iname #通过name定义变量名为iname
prompt: "请输入用户名" #执行剧本时提示信息
private: no #是否是隐私数据,no代表不是(屏幕可以显示)
- name: ipasswd #通过name再定义变量,变量名为ipasswd
prompt: "请输入密码" #执行剧本时提示信息
private: yes #是否是隐私数据,yes代表是(隐私数据屏幕不显示)
tasks: #定义剧本需要执行的任务
- name: Create a user. #定义第一个任务的描述信息
user: #调用user模块创建用户,设置用户密码
name: "{{ iname }}" #用户名是前面创建的变量iname
password: "{{ ipasswd | password_hash('sha512') }}"
#密码是前面定义的变量ipasswd,密码管道给password_hash加密.
2.5、单独定义个变量文件,在playbook中用vars_files调用该文件。
[root@control ansible]# vim ~/ansible/file_var.yml
---
- hosts: test
vars_files: variables.yml #当变量比较多时,专门定义一个文件用来存变量
tasks:
- name: create user.
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
#调用user模块创建用户
#用户名是变量文件variables.yml中定义的变量iname,密码也是变量文件中定义的变量
[root@control ansible]# vim ~/ansible/variables.yml
---
iname: cloud
ipass: '123456'
2.6、执行ansible-playbook命令时使用-e参数定义变量
[root@control ansible]# vim ~/ansible/command_var.yml
---
- hosts: test
tasks:
- name: create user
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname="beth" -e ipass="123456"