Ansible中自定义变量的使用
来源:互联网 发布:广州三箭汽枪淘宝网. 编辑:程序博客网 时间:2024/05/20 13:19
Ansible中自定义变量的使用
Ansible
使用的变量包括两种,內建变量和自定义变量。在我的上一篇博客中已经针对Ansible
的內建变量作了简单说明,同时,在Ansible
中变量引用的主要方式相同,而自定义变量的定义方式有以下四种:
1,通过命令行定义变量2,在playbook中定义变量3,在主机清单文件中定义变量4,通过roles角色定义变量
本文将主要针对Ansible
中定义变量的四种方式进行简单介绍。
1 通过命令行定义变量
由于变量通常用在palybook
文件中,与之配套我们需要在命令ansible-playbook
中使用-e
选项定义变量及赋值,格式如下:
ansile-playbook -e "var_name=value" playbook
现在定义远程节点node1
的ip为192.168.25.80
,示例如下:
[root@Centos7T Ansible]#cat playbook.yml- hosts: node1 remote_user: root tasks: - name: Dispaly Welcome Infromation shell: echo {{ var }}[root@Centos7T Ansible]#ansible-playbook -e "var='Welcome to Ansible'" playbook.ymlPLAY [node1] *************************************************************************TASK [Gathering Facts] ***************************************************************ok: [192.168.25.80]TASK [Dispaly Welcome Infromation] ***************************************************changed: [192.168.25.80]PLAY RECAP ***************************************************************************192.168.25.80 : ok=2 changed=1 unreachable=0 failed=0
当然,我们也可以直接在命令行中定义及使用变量:
[root@Centos7T Ansible]#ansible node1 -e "var1='Welcome to Ansible'" -m shell -a "echo {{ var1 }}"192.168.25.80 | SUCCESS | rc=0 >>Welcome to Ansible
2 在playbook中定义变量
在playbook中定义变量需要用到Ansible
的vars
模块,我们可以再将所有需要用到的变量同一在vars
模块下定义,定义格式需要遵循YAML语言格式:
vars: - var1: value1 - var2: value2 - var3: value3…… ……
示例如下:
[root@Centos7T Ansible]#cat playbook.yml- hosts: node1 remote_user: root vars: - dir1: /root/Ansible - dir2: /root/Ansible/test1 - dir3: /root/Ansible/test2 tasks: - name: Create New Folder file: name={{ dir1 }} state=directory - name: Create New Folder file: name={{ dir2 }} state=directory - name: Create New Folder file: name={{ dir3 }} state=directory[root@Centos7T Ansible]#ansible-playbook playbook.yml PLAY [node1] *************************************************************************TASK [Gathering Facts] ***************************************************************ok: [192.168.25.80]TASK [Create New Folder] *************************************************************changed: [192.168.25.80]TASK [Create New Folder] *************************************************************changed: [192.168.25.80]TASK [Create New Folder] *************************************************************changed: [192.168.25.80]PLAY RECAP ***************************************************************************192.168.25.80 : ok=4 changed=3 unreachable=0 failed=0
node1
上的执行结果如下:
[root@node1 ~]#tree Ansible/ Ansible/├── test1└── test22 directories, 0 files
3 在主机清单文件中定义变量
变量同样可以直接定义在主机清单文件/etc/ansible/hosts
中,表明该变量只对对应的主机或者组有效,对其余的主机和组无效,格式如下:
(i) 向不同的主机传递不同的变量;IP/HOSTNAME var1=value1 var2=value2(ii) 向组中的主机传递相同的变量;[groupname:vars]var1=value1var2=value2
示例如下:
[root@Centos7T Ansible]#tail -n 10 /etc/ansible/hosts[websvr]192.168.25.51 dir=/root/node2192.168.25.80 dir=/root/node1[node1]192.168.25.80[websvr:vars]file=hostname.txt[root@Centos7T Ansible]#cat playbook.yml- hosts: websvr remote_user: root tasks: - name: Create New Folder file: name={{ dir }} state=directory - name: Create New Folder shell: echo `hostname` > {{dir}}/{{ file }}[root@Centos7T Ansible]#ansible-playbook playbook.yml PLAY [websvr] ************************************************************************TASK [Gathering Facts] ***************************************************************ok: [192.168.25.80]ok: [192.168.25.51]TASK [Create New Folder] *************************************************************changed: [192.168.25.51]changed: [192.168.25.80]TASK [Create New Folder] *************************************************************changed: [192.168.25.51]changed: [192.168.25.80]PLAY RECAP ***************************************************************************192.168.25.51 : ok=3 changed=2 unreachable=0 failed=0 192.168.25.80 : ok=3 changed=2 unreachable=0 failed=0
执行结果如下:
节点1:[root@node1 ~]#[root@node1 ~]#ls node1/hostname.txtnode1/hostname.txt[root@node1 ~]#cat node1/hostname.txtnode1.test.com节点2:[root@node2 ~]#ls node2/hostname.txtnode2/hostname.txt[root@node2 ~]#cat node2/hostname.txtnode2.test.com
4 通过roles角色定义变量
在Ansible
的Roles
中定义变量,需要将变量及值的键值对形式写到roles
的vars
目录下的main.yml
文件中,同样适用YAML语言格式,格式如下:
var1: value1var2: value2var3: value3
通过Roles
定义的变量只适用于当前 Roles
,示例如下:
[root@Centos7T roles]#tree test/ #Roles文件组织结构test/├── files├── handlers├── playbook.retry├── playbook.yml├── tasks│ └── main.yml├── templates└── vars └── main.yml5 directories, 4 files[root@Centos7T roles]#cat test/tasks/main.yml #任务文件- name: Get IP Address shell: echo `{{ cmd }}` >> {{ dir }}/{{ file }}[root@Centos7T roles]#cat test/vars/main.yml #定义变量cmdcmd: hostname -I[root@Centos7T roles]#cat test/playbook.yml- hosts: websvr remote_user: root roles: - test[root@Centos7T test]#ansible-playbook playbook.yml #playbook文件调用RolesPLAY [websvr] ************************************************************************TASK [Gathering Facts] ***************************************************************ok: [192.168.25.80]ok: [192.168.25.51]TASK [test : Get IP Address] *********************************************************changed: [192.168.25.51]changed: [192.168.25.80]PLAY RECAP ***************************************************************************192.168.25.51 : ok=2 changed=1 unreachable=0 failed=0 192.168.25.80 : ok=2 changed=1 unreachable=0 failed=0
测试结果如下:
节点1:[root@node1 ~]#cat node1/hostname.txtnode1.test.com172.18.42.80 192.168.25.80 192.168.122.1节点2:[root@node2 ~]#cat node2/hostname.txtnode2.test.com192.168.25.51 172.18.42.51
至此,Ansible
的自定义变量接简单介绍到这里。
阅读全文
0 0
- Ansible中自定义变量的使用
- Ansible中內建变量的使用
- 实例学习ansible系列(16)playbook中自定义环境变量的使用
- grails 中自定义Taglib变量的使用
- Ansible的使用
- ANSIBLE的简单使用
- ansible的copy模块中content选项的使用
- 自定义视图中使用自定义变量
- 自定义视图中使用自定义变量
- 自定义视图中使用自定义变量
- 自定义视图中使用自定义变量
- 自定义视图中使用自定义变量
- 自定义视图中使用自定义变量
- php中静态变量(static)与自定义常量的使用
- QT中自定义编译变量(Buiild var)的使用
- Ansible的安装与使用
- ansible的安装与使用
- 自定义变量 AttributeSet的使用
- HDOJ 2550 百步穿杨
- DP
- [Leetcode从零开刷]226. Invert Binary Tree
- Virtual Box虚拟机文件瘦身处理
- Windows系统以及Mac系统/Linux系统配置环境变量
- Ansible中自定义变量的使用
- openssl 根据证书生成p7b证书链
- 【YOLO学习】召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))
- pusher websocket client,基于golang
- Spring IOC 和 AOP
- 两年小前端裸辞求职经历
- ssh框架java.lang.IllegalArgumentException
- Java中的ReadWriteLock是什么?
- MySQL 5.7.18的安装及主从复制(主从同步)