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-04-22:谈谈JDK1.8下的HashMap在并发情况下链表成环的过程。(挖)

    福哥答案2020-04-22: jdk1.8下的hashmap采用的是尾插法,不会有链表成环的问题.jdk1.7下采用的头插***有链表成环的问题. hashmap成环原因的代码出现在transfer ...

  2. Windows下 Navicat Premium 15安装教程(图文,含注册)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/zhangzhicheng1996/ ...

  3. 详解Python Graphql

    前言 很高兴现在接手的项目让我接触到了Python Graphql,百度上对其介绍相对较少也不够全面,几乎没有完整的中文文档,所以这边也借此机会学习一下Graphql. 什么是Graphql呢? Gr ...

  4. 拼接html不显示layui进度条解决方法

    最新有个新需求,要异步拼接html并渲染数据,并且我这边是用layui的flow.load(流加载)渲染多个进度条.按官网给出的 element.progress('demo', n+'%'); 就是 ...

  5. VM 添加硬盘,分区,挂载

    添加硬盘后使用>df -h 命令 VM安装linux系统之后,发现我们的硬盘不够,可通过两种方式添加硬盘 方式一:选择虚拟机,点击右键,设置,点击硬盘,点击添加,输入新添加的硬盘大小,保存与虚拟 ...

  6. java.io.IOException: Stream closed 的问题

    public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); ...

  7. Spring注解驱动开发02(作用域和懒加载)

    Spring中bean的作用域 默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回 ...

  8. MySQL经典练习题及答案,常用SQL语句练习50题

    表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...

  9. Better Key Sizes (and Attacks) for LWE-Based Encryption

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文 Abstract 基于“learning with errors”(LWE)问题,分析了理 ...

  10. Java多线程_JUC包下的阻塞队列

    在前面我们提到了阻塞队列,也用过了LinkedBolckingQueue队列了,在这里,我们主要对 ArrayBlockingQueue,PriorityBlockingQueue,DelayQueu ...