Linux Ansible管理变量、管理事实、管理机密

news2024/12/28 5:14:38

目录

Ansible变量

变量定义范围

变量类型

定义变量并引用

事实变量与魔法变量

事实变量

魔法变量

Ansible加密

ansible-vault参数

ansible-vault举例


Ansible变量

Ansible支持利用变量来存储值,并且可以在Ansible项目的所有文件中重复使用这些值

变量可能包含下面这些值

       要创建的用户

       要安装的软件包

       要重新启动的服务

       要删除的文件

       要从互联网检索的存档

变量命名规则

变量的命名必须以字母开头,并且只能包含字母、数字和下划线组成(不能包含空格)

变量定义范围

可以在ansible项目中的多个位置定义变量,根据不同的位置可以将变量大致简化为三个范围

全局范围(高优先级):在命令行或Ansible配置变量的变量

Play范围(中优先级):在Playbook和相关结构中设置的变量

主机范围(低优先级):由清单inventory、事实收集facts或注册register的变量,在主机和个别主机上设置的变量

如果存在多个级别定义了相同名称的变量,则以高优先级的变量为准

变量类型

字符串类型

service_port: 80 或 service_port=80

数组类型

user:

       name:

              admin1

              admin2

       uid:

              1230

              1000

提取数组类型变量的两种方式

user.name    提取的变量为admin1和amdin2

user[‘name’]  提取的变量为admin1和admin2

定义变量并引用

全局范围:在playbook执行时定义变量并引用(此处定义字符串变量)

通过{{ }}引用变量(将变量名称放在花括号{{ }}中),通过-e定义变量

vim httpd.yml
---
- hosts: web
  tasks:
    - name: install {{ package_name }} packages
      yum:
        name: "{{ package_name }}"
        state: present       
    - name: modify firewalld rules
      firewalld:
        port: "{{ service_port }}/tcp"
        immediate: yes
        permanent: yes
        state: enabled

ansible-playbook -e package_name=httpd -e service_port=80 httpd.yml

Play范围:在playbook内定义变量并引用(此处定义字符串变量)

通过vars定义变量,通过{{ }}引用变量(将变量名称放在花括号{{ }}中)

编写剧本并定义、引用变量
vim httpd.yml
---
- hosts: web
  vars:
    package_name: httpd
    service_port: 80
  tasks:
    - name: install {{ package_name }} packages
      yum:
        name: "{{ package_name }}"
        state: present     
    - name: modify firewalld rules
      firewalld:
        port: "{{ service_port }}/tcp"
        immediate: yes
        permanent: yes
        state: enabled

执行剧本
ansible-playbook httpd.yml

Play范围:在playbook中指定外部文件作为变量文件并引用(通过 “{{ 变量名 }}” 引用变量)--(此处定义数组变量)

在playbook中使用var_files引用外部文件作为变量文件,通过{{ }}引用变量(将变量名称放在花括号{{ }}中)

在外部文件中定义变量
vim ~/ansible/users.yml
users:
  admin1:
    name: admin1
    uid: 1200

创建剧本,并引用外部变量文件
vim user_list.yml
---
- name: create users
  hosts: web
  vars_files:
    - users.yml
  tasks:
    - name: create user admin1
      user:
        name: "{{ users.admin1.name }}"
        uid: "{{ users['admin1']['uid'] }}"
        state: present

执行剧本
ansible-playbook user_list.yml

主机范围:在资产清单inventory文件内定义变量,然后在playbook中引用

给特定主机、主机组定义变量

在资产清单文件中定义变量
vim ~/ansible/inventory
[web]
node1

[ftp]
node2

[web:vars]   #为web主机组定义变量
package_name=httpd
service_port:=80

创建剧本文件并引用变量
vim httpd.yml
---
- hosts: web
  tasks:
    - name: install {{ package_name }} packages
      yum:
        name: "{{ package_name }}"
        state: present      
    - name: modify firewalld rules
      firewalld:
        port: "{{ service_port }}/tcp"
        immediate: yes
        permanent: yes
        state: enabled

执行剧本,使用指定的资产清单(定义了变量的资产清单)
ansible-playbook -i ~/ansible/inventory httpd.yml

主机范围:使用已经注册的变量捕获命令输出

使用register语句进行捕获命令的输出(用于调试或其他目的)

使用debug模块将注册变量的值(由register获取到的值)存储到终端显示出来

即:查看register所对应模块的执行结果(通过json格式显示)

vim httpd.yml

---
- hosts: web
  tasks:
    - name: install httpd packages
      yum:
        name: httpd
        state: present
      register: yesok   
    - name: debug
      debug:
        var: yesok  或者 msg: "{{ yesok }}"


事实变量与魔法变量

事实变量

Ansible管理事实是在受管主机上检测到的变量,是主机范围类型的变量;包含主机名、内核版本、IP地址等信息;我们借助事实变量能够方便的检测被管理主机的状态;

默认在执行第一个Playbok之前会借助setup模块收集受管主机的状态,并存放在ansible_facts默认变量中,格式是json格式

查看某个主机的事实变量

通过ansible 主机名 -m setup 查看此主机/主机组的事实变量

也可以通过debug模块来查看ansible_facts变量的值

通过变量名提取事实变量的值

提取方式同提取数组类型变量,都是两种方式(可以根据ansible 主机名 -m setup的输出结果来编写如何提取变量)

主机名:            ansible_facts['hostname'] 或 ansible_facts.hostname
完全有效域名:      ansible_facts['fqdn']  或 ansible_facts.fqdn
主要IPv4地址:      ansible_facts['default_ipv4']['address'] 或 ansible_facts. default_ipv4.address
/dev/vda的大小:    ansible_facts['devices'] ['vda']['size'] 或ansible_facts.devices.vda.size

如果不想去收集事实变量的话,可以做以下设置(可以加快剧本的运行)

在配置playbook时,加上gather_facts对象(与hosts同一层级)

gather_facts: no    yes表示会收集,no表示不会收集

魔法变量

魔法变量并不是事实变量,也不是通过setup模块配置的;是由Ansible自动设置的,可以用于获取特定受管主机的相关信息(Ansible内置变量)

常用魔法变量包含:

hostvars:包含受管主机的变量,用于获取另一台受管主机的变量的值
group_names:列出当前受管主机所属的所有组
groups:列出清单中的所有组和主机
inventory-hostname:包含清单中的当前受管主机的主机名称

可以通过debug模块来获取主机上的魔法变量

ansible 主机名 -m debug -a "var=hostvars.localhost"


Ansible加密

Ansible vault是ansible的一项功能,可以将敏感数据(密码或者密钥)保留在加密文件中,然后在ansible.cfg配置文件中的vault_password_file 字段指定加密文件的路径,此时就可以通过ansible-vault命令来创建、编辑、加密、解密和查看yml文件

ansible-vault参数

ansible-valut --ask-vault-pass       要求需要输入密码(在执行加密的Yml文件、检验加密的Yml文件的语法时需要使用此参数)
ansible-vault --vault-password-file 指定加解密所使用的加密文件(默认使用ansible.cfg中vault_password_file字段对应的文件作为加密文件)
ansible-vault creat              创建一个加密的yml文件(一般不推荐直接使用ansile-vault创建空的加密yml文件,一般是通过vim创建yml文件,然后再通过ansible.vault加密)
ansible-vault encrypt          对现有的yml文件进行加密
ansible-vault view           查看加密yml文件
ansible-vault edit                编辑加密的yml文件
ansible-vault decrypt          对现有的加密yml文件进行解密
ansible-vault rekey             对现有的yml文件更新密码(注意更新密钥时需要把ansible.cfg配置文件中的vault_password_file 字段给去掉或注释掉)

ansible-vault举例

配置加密文件并在ansible.cfg中指定

vim /home/greg/ansible/vault.yml
admin@123

vim ansible.cfg
vault_password_file = /home/greg/ansible/vault.yml

对现有的yml文件进行加密

ansible-vault encrypt httpd.yml

查看加密的yml文件

ansible-vault view httpd.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器缓存原理

使用 HTTP 缓存的好处:通过复用缓存资源,减少了客户端等待服务器响应的时间和网络流量,同时也能缓解服务器端的压力。可以显著的提升网站的应用性能。 HTTP 缓存策略分为两种:强制缓存、协商缓存。 强制缓存 浏览器缓存没有过期…

[pgrx开发postgresql数据库扩展]5.自定义函数与SQL组合应用

老规矩的声明: 并不是所有场景都需要(或者适合)用rust来写的,绝大部分操作数据库的功能和计算,用SQL就已经足够了! 本系列中,所有的案例,仅用于说明pgrx的能力,而并非是…

BPMN2.0 任务-用户任务

“用户任务(user task)”用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。 用户任务用左上角有一个小用户图标的标准任务(圆角矩形)表示。 用户任务在XML中如下定义。其中id是必须属性,name是可选属性…

提高网络安全性:探索ADAudit Plus的全功能IT安全审计解决方案

网络安全一直是组织和企业需要关注的重要问题之一,因为随着企业数字化的加速和技术的不断发展,网络攻击的威胁也变得越来越严峻。因此,组织和企业需要采取措施保护其信息资产和网络安全。 ADAudit Plus是一种全功能的IT安全审计解决方案&…

2023年商票研究报告

第一章 行业概况 1.1 定义 商票是指出票人依托商业汇票系统,以数据电文形式制作的,委托付款人在指定日期无条件支付确定的金额给收款人或者持票人的票据。按承兑人的不同,商业汇票分为银行承兑汇票和商业承兑汇票(即商票&#x…

flex布局 高度没有自动撑到max-height

在做一个项目时,用到了竖向flex布局,我写了max-height: 820px, 但是到小屏幕时,只能撑到773px,解决方法是height: max-content. 但是不知道为什么只能撑到773px便撑不动了。 https://zhuanlan.zhihu.com/p/130460207 这个文档说的…

workerman开发者必须知道的几个问题

1、windows环境限制 windows系统下workerman单个进程仅支持200个连接。 windows系统下无法使用count参数设置多进程。 windows系统下无法使用status、stop、reload、restart等命令。 windows系统下无法守护进程,cmd窗口关掉后服务即停止。 windows系统下无法在一个…

目标检测之损失函数

损失函数的作用为度量神经网络预测信息与期望信息(标签)的距离,预测信息越接近期望信息,损失函数值越小。 在目标检测领域,常见的损失分为分类损失和回归损失。 L1损失 L1 Loss也称为平均绝对值误差(MAE&…

[HNCTF 2022 WEEK4]ezheap

Index 前言Checksec & IDA 前言 手把手教学,覆盖一切途中会遇到的问题。 [HNCTF 2022 WEEK4]ezheap Checksec & IDA 保护全开,但是四肢健全(四项功能 增删改查),因此是ezheap。 主要来观察函数add和show。 d…

注意力机制:基于Yolov5/Yolov7的Triplet注意力模块,即插即用,效果优于cbam、se,涨点明显

论文:https://arxiv.org/pdf/2010.03045.pdf 本文提出了可以有效解决跨维度交互的triplet attention。相较于以往的注意力方法,主要有两个优点: 1.可以忽略的计算开销 2.强调了多维交互而不降低维度的重要性,因此消除了通道和权…

信号完整性分析基础知识之传输线和反射(三):仿真和测试反射波形

使用上面反射系数的定义,可以计算来自任意阻抗的反射信号。当终端阻抗为阻性元件时,阻抗恒定,反射电压容易计算。当终端具有更复杂的阻抗行为(例如电容性或电感性终端,或两者的某种组合)时,如果…

3.QT布局管理

布局管理系统 布局管理器 QLayout类继承图: 新建Qt Widgets项目mylayout,选择基类QWidget,类名MyWidget .ui拖用Font Combo Box、Text Edit,单击主界面,ctrlL,发现两个部件填满界面,运行后随…

Docker部署MySQL主从复制

文章目录 平台说明一、Docker创建网络二、创建MySQL主从容器1.拉取镜像2.查看镜像3.创建启动容器 三、主从配置1.主机配置文件2.从机配置文件3.注意事项4.重启容器5.连接主从数据库主机配置从机配置启动从机复制 四、测试主从复制 平台说明 操作系统:Windows 11 Do…

接口测试入门必会知识总结(学习笔记)

目录 什么是接口? 内部接口 外部接口 接口的本质 什么是接口测试? 反向测试 为什么说接口测试如此重要? 越接近底层的 Bug,影响用户范围越广 目前流行的测试模型 接口测试的优越性 不同协议形式的测试 接口测试工作场景…

『python爬虫』01. 爬虫入门的基础知识(保姆级图文)

目录 1. 合法性2. 爬虫原理3. 网站源代码查看4. 查看网络请求总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 1. 合法性 查看网站的爬虫协议,简单介绍爬虫协议robots.txt,避免爬虫爬的好…

简单理解内存分页机制

文章目录 1.CPU寻址方式2.段式内存访问的缺点3.80386两级页表4.PAE三级页表5.x64四级页表6.虚拟内存 思考一个问题:如果没有这样的分页机制时应用程序是怎么访问物理内存地址? 1.CPU寻址方式 Effective Address Base (Index * Scale) Displacement …

加载自己的图像数据集

文章目录 1 加载图像数据集2 图像预处理3 再次加载数据集4 这里还有一个问题,我们没有验证集5 构建DataLoader6 检查是否正确导入数据集 原文链接:《加载自己的图像数据集》 ​ 数据集下载链接 1 加载图像数据集 目录结构: 针对这种非常典型…

Java+proj4j实现根据EPSG编码进行坐标系转换

场景 JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换: JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换_霸道流氓气质的博客-CSDN博客 上面使用GeoTools实现坐标系转换。 VueOpenlayersproj4实现坐标系转换: VueOpenlayersproj4实现坐标系转换_霸道流…

VUE3页面div点击改变样式

如题目所示。 用上VUE之后,前后端分离,组件式开发,代码复用、独立性和隔离性都挺好,可维护性得以提高。相比之下,以前用jQuery,代码实在太多了。 不过,vue有个地方不大好,就是控制…

算法基础(二)(共有30道例题)

六、数据结构 (一)数组 定义:数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。 注意: (1)数组下标都是从0开始的。 (2&#xff0…