Ansible支持十几种定义变量的方式

根据优先级排序的定义方式:

  1. Inventory变量
  2. Host Facts变量
  3. Playbook变量
  4. Playbook提示变量
  5. 变量文件
  6. 命令行变量

1.Inventory变量(在主机清单配置文件中定义变量)。

# 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"

下面编写剧本调用刚才的变量:(在剧本中需要调用变量是要使用{{}})

vim inventory_var.yml

---

- hosts: test                                                         #定义需要远程管理的主机是谁

tasks:                                                                 #剧目要完成哪些任务

- name: create a user with var                         #剧目中的第一个任务描述信息

user:                                                              #调用user模块创建用户

name: "{{ iname }}"                                      #需要创建的用户名是iname这个变量

  1. #注意事项:
  2. #在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
  3. #如果是在后面或者中间位置调用变量{{}}外面可以不加双引号

2.Host Facts变量

  1. vim ~/ansible/facts_var.yml
  2. ---
  3. - hosts: test
  4. tasks:
  5. - name: create user.
  6. user:
  7. name: "{{ansible_hostname}}"
  8. #定义剧本,远程所有被管理主机,调用user模块,创建用户
  9. #需要创建的用户名ansible_hostname是一个ansible_facts变量
  10. #验证: 到node1主机查看是否有一个与主机名同名的用户

3)Playbook变量(使用vars关键词可以在playbook内定义变量)。

# 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把密码加密.

4)Playbook提示变量(根据提示输入变量的值)。

# 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加密.

执行ansible-playbook命令时使用-e参数定义变量

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'

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"

ansible中定义变量的若干方法的更多相关文章

  1. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  2. stm32存储器映像和标准库中定义外设地址的方法

    结合存储器映像理解stm32标准库中定义外设地址的方法. stm32f103zet6是32位的.它所能访问的地址空间范围为2^32=4GB,把4GB分为8个block,分别为block0-block- ...

  3. C++中输出变量类型的方法

    C++中输出变量类型的方法 在c++中输出变量或者数据类型,使用typeid().name()的方法.如下例子: #include <iostream> #include <stri ...

  4. case中定义变量

    1.c语言switch/case中定义变量   case 0: int b = 0 ; printf("0");break; case 1: printf("1" ...

  5. (转载)JavaScript中定义变量

    (转载)http://blog.163.com/xuxiaoqianhz@126/blog/static/165190577201061594421870/ JavaScript中定义变量有两种方式: ...

  6. WebApi一个控制器中定义多个Get方法。

    问题:怎样解决一个ApiController中定义多个Get方法或者Post方法? 答:要想实现一个ApiController中定义多个Get方法或者Post方法,则需要在WebApiConfig类中 ...

  7. 在C++Builder中定义事件的实现方法

    ++Builder是由Borland公司推出的一款可视化集成开发工具.C++Builder的集成开发环境(IDE)提供了一系列可视化快速应用程序开发(RAD)工具,让程序员可以很轻松地建立和管理自己的 ...

  8. 不要在.h文件中定义变量

    今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量... 以下引用别人的一篇说明,警示自己. C语言作为一种结构化的 ...

  9. css中定义变量

    css中定义变量 定义变量可分多种情况: 1.定义全局变量 :root { --borderColor: #ccc;} 2.定义某元素下的变量 .look{ --borderColor: #ccc;} ...

随机推荐

  1. 2020-05-18:MYSQL为什么用B+树做索引结构?平时过程中怎么加的索引?

    福哥答案2020-05-18:此答案来自群员:因为4.0成型那个年代,B树体系大量用于文件存储系统,甚至当年的Longhorn的winFS都是基于b树做索引,开源而且好用的也就这么个体系了.B+树的磁 ...

  2. C#LeetCode刷题之#58-最后一个单词的长度(Length of Last Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3927 访问. 给定一个仅包含大小写字母和空格 ' ' 的字符串, ...

  3. Java实现经典七大经典排序算法

    利用Java语言实现七大经典排序算法:冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序. 分类 类别 算法 插入排序类 插入排序.希尔排序 选择排序类 选择排序.堆排序 交换排序类 ...

  4. Code Review 从失败中总结出来的几个经验

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  5. vue+element树形结构右键菜单

    环境:vue-admin-template   vue 2.6.10 element-ui 2.7.0 1.自定义组件,文件位置:src/components/mentContext <temp ...

  6. angular中阿里矢量图标使用

    <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...

  7. 震惊!ConcurrentHashMap里面也有死循环,作者留的“彩蛋”?

    JDK BUG 这篇文章,聊一下我最近才知道的一个关于 JDK 8 的 BUG 吧. 首先说一下我是怎么发现这个 BUG 的呢? 大家都知道我对 Dubbo 有一定的关注,前段时间 Dubbo 2.7 ...

  8. 学长小清新题表之UOJ 14.DZY Loves Graph

    学长小清新题表之UOJ 14.DZY Loves Graph 题目描述 \(DZY\)开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 ...

  9. 年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?

    小孩子才做选择,成年人全都要.那么我们现在就来看看如何获得一台免费的 8 核 4G 公网 Docker 实验平台服务器. Play With Docker 直接打开 https://labs.play ...

  10. 【论文总结】MapReduce论文

    摘要: MR是啥:编程模型,用户只需编写Map,Reduce两个函数,系统完成分布式计算 MR系统是啥:在大量普通计算机上实现并行化计算,系统只关心如何分割数据.大规模集群的调度.集群容错.集群通信 ...