首页 > 其他分享 >Ansible - 3 - 变量使用

Ansible - 3 - 变量使用

时间:2022-11-04 22:22:21浏览次数:49  
标签:变量 vars ansible Ansible playbook 使用 facts name


变量(variable)

  • Ansible的变量名仅能由字母、数字和下划线组成,且只能以字母开头。
  • Python关键字和playbook关键字都不能作为有效的变量名。
  • Ansible的变量可以被定义在playbook、inventory、yaml格式文件、角色和命令行中,也可以将任务的输出定义为变量。

自定义变量

# 方式1:在Inventory中为主机或组定义专用变量
[groupname]
192.168.56.1 variable_name=value
[groupname:vars]
variable_name=value
[all:vars]
ansible_ssh_port="2222"

# 方式2:在playbook中通过关键字vars或vars_files定义变量
vars:
  - var_name: value
  - var_name: value
vars_files:
  - ./external_vars.yml  # 变量文件内容遵循yml格式

# 方式3:在playbook中把任务的输出通过关键字register定义为变量,然后用于其他任务
tasks:
    - name: test
      shell: /usr/bin/foo
      register: foo_result

# 方式4:在playbook中使用变量,执行palybook时通过命令行传递变量,通过“-e”或“--extra-vars”参数传递的变量优先级更高
ansible-playbook test.yml --extra-vars "hosts=Test user=anliven"

# 方式5:指定主机角色时通过 roles 传递变量,并在角色内通过` var_name `调用
roles:
  - { role: ROLE_NAME, var: value, ...}

系统变量

# 远程主机的系统信息统称为facts
# facts信息是JSON格式的数据结构,ansible_facts是最上层,可以使用 ansible_facts 变量查看所有内容
# 此外默认情况下使用 ansible_ 前缀可以将一些fact作为顶级变量访问
# 通过 setup 模块可以查看指定主机的所有facts信息,通过使用filter参数来查看指定信息

ansible <host> -m setup  # 查看指定主机的facts信息
ansible ta -m setup | grep "xxx"  # 获取主机所有facts然后结合grep命令过滤
ansible ta -m setup -a "filter=ansible_os_family"  # 通过filter参数来查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts  # 通过filter参数查看指定信息并按主机名保存到facts目录

引用变量

# 普通变量
通过 {{ var_name }} 方式引用

# 关键字register或系统fact变量
- 返回结果集通常是嵌套yaml或者json的数据结构
- 通过  {{ var_name.stdout }}  或 {{ ansible_facts["eth0"]["ipv4"]["address"] }} 的方式引用

变量优先级

# 优先级
1. 命令行中定义的变量(用-e或--extra-vars定义的变量)
2. 在Inventory中定义的连接变量(比如:ansible_ssh_user)
3. 普通变量(命令行转换、play中的变量、included的变量、role中的变量等)
4. 在Inventory中定义的其他变量
5. Facts变量

标签:变量,vars,ansible,Ansible,playbook,使用,facts,name
From: https://www.cnblogs.com/anliven/p/16850555.html

相关文章

  • 1.2 基础变量声明
    1.2基础变量声明/*例1.2-1:变量声明*/publicclassdemo01{publicstaticvoidmain(String[]args){//声明类型标识符=类型量;//声......
  • Zabbix-3.0.x使用OneAlert发送告警
    OneAlert是国内首个SaaS模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有IT事件,提升IT可靠性。它能以史上第二快的速度,对事件进行智能的组织......
  • 【视觉基础篇】12 # 如何使用滤镜函数实现美颜效果?
    说明【跟月影学可视化】学习笔记。如何理解像素化?像素化所谓像素化,就是把一个图像看成是由一组像素点组合而成的。每个像素点负责描述图像上的一个点,并且带有这个点的基本绘......
  • flink 项目打包成jar包使用java -jar运行异常
    java-jar错误信息如下:Exceptioninthread"main"com.typesafe.config.ConfigException$UnresolvedSubstitution:reference.conf@jar:file:flinkdemo-1.0-SNAPSHOT-......
  • kali使用笔记
    当前Kali版本#lsb_release-aNoLSBmodulesareavailable.DistributorID:KaliDescription:KaliGNU/LinuxRollingRelease:2022.2Codename:kali-ro......
  • 常见函数 ,过滤函数 直接导入使用
    //importparseTime,formatTimeandsettofilter/***Showplurallabeliftimeispluralnumber*如果时间是复数,则显示复数标签*@param{number}time......
  • 使用emplace_back的new initializer expression list treated as compound expression
    测试代码使用emplace_back可以避免不必要的构造和拷贝,而是直接在向量的内存位置执行construct进行构造,代码看起来也更加简洁。但是在使用的时候,会发现有一些和直观不太对......
  • 实际开发中有⽤过环境变量吗?
    有⽤过的,我在公司⾥⽤过的场景主要是为了和后台对接⼝的时候切换根域名baseURL时⽤,因为公司有⼏个不同的环境嘛,⼀个环境对应前端⼀个环境变量⽂件,同样⼀个环境变量⽐如说V......
  • 2.变量
    1.什么是变量  概念:表示一个数据存储空间,内存地址的别名。  作用:内存地址是一串十六进制数,非常不好记忆;通过变量可以快速找到数据   2.变量的三要素:......
  • 不想把狗放到鸡窝里?那就使用泛型
    不想把狗放到鸡窝里?那就使用泛型泛型在Java语言中也是一个重要的概念,利用泛型可以告诉编译器我们需要什么样的类型。泛型经常作用于容器上,比如前面我们说到的List、Set和Ma......