当前位置: 首页 > news >正文

自动化运维-ansible中的变量运用

自动化运维-ansible中的变量运用

一、变量命名规则

  • 组成:字母、数字、下划线。
  • 必须字母开头。
    • 合法: app_port, web_1, varA
    • 非法: 2_var (以数字开头), my-var (包含其他字符), _private (以下划线开头)
  • 避免使用内置关键字:例如 hosts, tasks, name, vars, when, register 等。

二、变量的优先级

  1. Global范围(高):从命令行和ansible配置设置的变量
  2. play范围(中):set_fact、register和在play和相关结构中设置的变量
  3. Host范围(低):inventory、facts的变量,在主机组和个别主机上设置的变量

命令行 > Playbook 中的设置 > Inventory 中的设置 > 角色默认值

越“具体”的设置,优先级越高

三、注册和定义变量的各种方式

  1. vars 定义变量
  2. Vars_files 定义变量
  3. register 注册变量
  4. set_fact 定义变量
  5. 通过命令传入变量
  6. 主机清单中的变量
  7. 内置变量
  8. With_itens 叠加变量

四、对各种方式的示例

  1. vars 定义变量

    [student@master ansible] vim a.yml
    # 编辑内容如下
    ---
    - name: test1hosts: node1vars:- a: 1- b: 2- c:c1: 3c2: 4tasks:- name: test11debug:msg: this is {{ a }}- name: test12debug:msg: "{{ b }}"- name: test13debug:msg: "{{ c.c1 }}"- name: test14debug:var: c.c2
    

    在这里插入图片描述

  2. Vars_files 定义变量

    [student@master ansible] vim yyy
    # 编辑内容如下
    a: 1
    b: 2
    c: c1: 3c2: 4
    
    [student@master ansible] vim b.yml
    # 编辑内容如下
    ---
    - name: test2hosts: node1vars_files: /home/student/ansible/yyytasks:- name: test21debug:msg: this is {{ a }}- name: test22debug:msg: "{{ b }}"- name: test23debug:msg: "{{ c.c1 }}"- name: test24debug:var: c.c2
    

    在这里插入图片描述

  3. register 注册变量

    使⽤register选项,可以将当前task的输出结果赋值给⼀个变量

    以下示例:/tmp/file1 的内容为 123321 ,/tmp/file11 不存在

    [student@master ansible] vim c.yml
    # 编辑内容如下
    ---
    - name: test3hosts: node1tasks:- name: test31shell:cmd: cat /tmp/file1register: yy- name: test32debug:var: yy.stdout- name: test33shell:cmd: cat /tmp/file11register: yyyyignore_errors: yes- name: test34debug:var: yyyy.stdout
    

    在这里插入图片描述

    如图所示:无论输出结果是否正确,都会赋值给自定义的变量

  4. set_fact 定义变量

    可以将某个变量的值赋值给另⼀个变量,也可以将字符串赋值给变量

    事实变量是 Ansible 自动发现并设置的关于受控主机的系统信息属性的变量

    每个主机都有自己独有的一套事实变量,是Ansible预定义的,有固定的命名格式(通常以 ansible_ 为前缀),你不能随意改变这些变量的名字

    [student@master ansible] ansible node1 -m setup > z
    

    使用 ansible 主机名 -m setup 可以查看主机的所有事实变量

    为了方便查找,一般会重定向到自定义的文件中

    常用变量名对应的含义
    ansible_default_ipv4.addressipv4地址
    ansible_enp1s0.ipv4.addressansible_网卡名称.ipv4.address
    ansible_fqdn完全合格域名(FQDN)
    ansible_hostname主机名称
    ansible_memtotal_mb内存大小
    ansible_bios_versionbios版本
    ansible_devices.vda.sizevda硬盘大小
    ansible_devices.vdb.sizevdb硬盘大小
    ansible_lvm.vgs逻辑卷中卷组
    [student@master ansible] vim d.yml
    # 编辑内容如下
    ---
    - name: test4hosts: node1tasks:- name: test41debug:msg: the ipv4 address of {{ ansible_hostname }} is {{ ansible_default_ipv4.address }}
    

    在这里插入图片描述

  5. 通过命令传入变量

    [student@master ansible] vim e.yml
    # 编辑内容如下
    ---
    - name: test5hosts: node1tasks:- name: test51debug:msg: this is {{ aa }}- name: test52debug:var: bb
    

    在这里插入图片描述

  6. 主机清单中的变量

    在主机清单中定义变量

    [student@master ansible] vim inventory
    # 编辑内容如下
    node5[testa]
    node1
    node2[testa:vars]
    var1='ni'
    var2='hao'[testb]
    node3
    node4
    
    [student@master ansible] vim f.yml
    # 编辑内容如下
    ---
    - name: test6hosts: node1tasks:- name: test61debug:msg: "{{ var1 }}"- name: test62debug:msg: var2
    

    在这里插入图片描述

    除了可以在主机清单里定义变量外,还可以在 /etc/ansible(root用户)或 /home/用户名/ansible(普通用户) 目录下创建group_vars和host_vars目录下定义变量

    node1文件名以主机命名,还可以命名为node1.yml

    [student@master ansible] mkdir host_vars
    [student@master host_vars] vim node1
    [student@master host_vars] vim node1.yml
    
    # 在 node1 中编辑内容如下
    var1: t1
    var2: t2# 在 node1.yml 中编辑内容如下
    var1: t3
    var2: t4
    

    编辑 playbook ,看输出变量的值

    [student@master ansible] vim g.yml
    # 编辑内容如下
    ---
    - name: test7hosts: node1tasks:- name: test71debug:msg: "{{ var1 }}"- name: test72debug:var: var2

    在这里插入图片描述

    发现输出结果为 node1 中定义的值

    如果node1与node1.yml同时存在,则 node1的优先级更高

    除了在 host_vars 目录下,在 group_vars 目录下也同理

    如果 host_vars 目录和 group_vars 目录同时存在,则 host_vars 的优先级更高

  7. 内置变量

    是 Ansible 自动预定义和设置的变量。你无需使用 set_factvars 来声明它们

    为你提供关于当前运行环境、Inventory(清单)、Playbook 本身以及连接信息等重要上下文

    常用变量名对应作用
    ansible_version显示ansible的版本
    inventory_hostname显示主机清单主机名称
    play_hosts显示当前playbook实际要操作的所有主机的列表
    groups显示主机清单中的组与主机的对应关系
    groups.all显示所有清单主机
    group_names显示主机的主机组的名称
    inventory_dir显示主机清单所在的目录
  8. With_itens 叠加变量

    可以给一个变量赋予多个值

    让一个任务对列表中的每个项目执行一次

    [student@master ansible] vim h.yml
    # 编辑内容如下
    ---
    - name: test8hosts: node1tasks:- name: test81shell:cmd: echo "{{ item }}"with_items:- user1- user2- user3register: xx- name: test82debug:var: xx.results[0].stdout- name: test83debug:var: xx.results[1].stdout- name: test84debug:var: xx.results[2].stdout
    

    在这里插入图片描述

http://www.dtcms.com/a/362273.html

相关文章:

  • LeetCode Hot 100 Python (61~70)
  • 芯片的可编程字
  • Ps画笔和橡皮擦工具
  • 分布式事务相关02
  • 国内服务器如何安装docker或者是1panel
  • 关闭页面强制清除所有循环定时器
  • Linux 进程间通信(IPC)
  • Android14 init.rc各个阶段的主要操作
  • authentication port-control auto 和 dot1x port-control auto
  • Shell 编程:正则表达式与文本处理器
  • 软考-操作系统-错题收集(1)进程P的页面变换
  • 分布式一致性算法相关
  • 【Audio】切换至静音或振动模式时媒体音自动置 0
  • 基于SpringBoot+MYSQL开发的师生成果管理系统
  • 解锁Git仓库瘦身秘籍,git-sizer真香警告
  • Next.js渲染模式:SSR、SSG与ISR揭秘
  • Python实现点云渲染可视化杂记(直接、彩虹渐变、柱状、饼状和T-SNE赋色)
  • The Algorithmic Foundations of Differential Privacy - 2
  • 8Lane V-by-One HS LVDS FMC Card
  • 【开题答辩全过程】以 智慧药店管理系统的实现与设计为例,包含答辩的问题和答案
  • 基于单片机智能空调/温度控制系统
  • GaussDB 集群故障cm_ctl: can‘t connect to cm_server
  • API安全厂商F5首发后量子加密方案,为企业后量子时代加固防线
  • Java中方法的参数传递
  • TFT屏幕:STM32硬件SPI+DMA+队列自动传输
  • 【无标题】训练、推理适用的数据类型
  • C++ 学习与 CLion 使用:(五)数据类型,包括整型、实型、字符型、转义字符、字符串、布尔型
  • 椭圆曲线的数学基础
  • 【算法专题训练】17、双向链表
  • openEuler2403部署Redis8集群