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

news/2024/5/19 11:46:04/文章来源:https://blog.csdn.net/m0_49864110/article/details/130392902

目录

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: webtasks:- name: install {{ package_name }} packagesyum:name: "{{ package_name }}"state: present       - name: modify firewalld rulesfirewalld:port: "{{ service_port }}/tcp"immediate: yespermanent: yesstate: enabledansible-playbook -e package_name=httpd -e service_port=80 httpd.yml

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

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

编写剧本并定义、引用变量
vim httpd.yml
---
- hosts: webvars:package_name: httpdservice_port: 80tasks:- name: install {{ package_name }} packagesyum:name: "{{ package_name }}"state: present     - name: modify firewalld rulesfirewalld:port: "{{ service_port }}/tcp"immediate: yespermanent: yesstate: enabled执行剧本
ansible-playbook httpd.yml

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

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

在外部文件中定义变量
vim ~/ansible/users.yml
users:admin1:name: admin1uid: 1200创建剧本,并引用外部变量文件
vim user_list.yml
---
- name: create usershosts: webvars_files:- users.ymltasks:- name: create user admin1user: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: webtasks:- name: install {{ package_name }} packagesyum:name: "{{ package_name }}"state: present      - name: modify firewalld rulesfirewalld:port: "{{ service_port }}/tcp"immediate: yespermanent: yesstate: enabled执行剧本,使用指定的资产清单(定义了变量的资产清单)
ansible-playbook -i ~/ansible/inventory httpd.yml

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

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

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

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

vim httpd.yml---
- hosts: webtasks:- name: install httpd packagesyum:name: httpdstate: presentregister: yesok   - name: debugdebug: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@123vim ansible.cfg
vault_password_file = /home/greg/ansible/vault.yml

对现有的yml文件进行加密

ansible-vault encrypt httpd.yml

查看加密的yml文件

ansible-vault view httpd.yml

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop3.2.4+Hive3.1.2+sqoop1.4.7安装部署

目录 一、软件包 二、JDK部署 1.JDK解压 2.设置环境变量 3.环境验证 4.分发JDK相关文件至Node_02、Node_03 5.环境生效 三、Zookeeper部署 1.Zookeeper解压 2.Zookeeper配置 3.创建myid文件 4.设置环境变量并添加映射 5.分发ZooKeeper 相关文件至Node_02、Node_0…

Qt — Graphics/View框架

文章目录 前言一、Qt图形系统介绍二、Graphics/View框架 前言 Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。 一、Qt图形系统介绍 Qt 应用程序的图形界面包含各种控件,比如窗口、按钮、滚动条等。所有这…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

4月24日~4月26日学习总结

一,刷题目情况,已经完成了8道题目,对于其中一些题目做一下题解。 这个题目的意思是找到的两个位置l和r,为了做到这个数组的l到r的子数组经过排序后,会变成输入的另外一个数组,这个题目的思路就是首先找到在…

服务(第十篇)Nginx和tomcat反向代理(动静分离)

正向代理: 当用户想访问某一网址时,用户先访问代理服务器,然后由代理服务器向目标网址发送请求最终将数据返回代理服务器,最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 反向代理:基本流程是与正向代理…

(04)基础强化:接口,类型转换cast/convert,异常处理,传参params/ref/out,判断同一对象

一、复习 1、New的截断是指什么? new除了新开空间创建初始化对象外,还有一个隐藏父类同名方法的作用。 当子类想要隐藏父类同名的方法时用new,用了new后父类同名方法将到此为止,后面 继承的…

centos7部署FastDFS服务

一、安装需要的相关依赖 yum -y install make cmake gcc gcc-c 因为我的服务器已经安装了gcc,所以略去 使用gcc -v查看版本 yum -y install zip unzip 安装性能事件通知库 yum -y install libevent 安装nginx依赖 yum -y install libevent yum -y install zli…

最新版TensorFlow的GPU版本不支持原生Windows系统(大坑预警)

一、前言 首先需要说明,按照官方中文文档安装是无法正常检测到GPU的。因为TensorFlow 2.10是支持原生Windows系统GPU环境的最后版本,默认安装的版本都比较高。 中文文档没有说明,英文文档是有提到的: (我在GitHub上找…

操作系统之进程同步和互斥

目录 什么是进程同步和进程互斥 进程互斥的软件实现方法 进程互斥的硬件实现方法 互斥锁 信号量机制 用信号量实现进程互斥和同步 生产者消费者问题 多生产者多消费者问题 吸烟者问题 读者写者问题 哲学家进餐问题 管程 死锁 什么是进程同步和进程互斥 进程同步 进…

Scala之模式匹配与隐式转换

目录 模式匹配: 基础语法如下: 模式守卫: 类型匹配: 对象匹配 样例类: 偏函数: 偏函数的化简写法: 偏函数的使用: 隐式转换: 官方定义: 个人理解&…

Linux-使用mobaxterm连接虚拟机ubuntu

一、准备工作 VMware:16.0.0 Ubuntu:18.4 MobaxTerm:链接:https://pan.baidu.com/s/1dNsahe9wO5KrWlWXtNqT0A?pwdaz39 提取码:az39 二、实操 1.检查系统是否安装ssh service sshd status 如果显示未安装&#xff0…

基于MATLAB实现WSN(无线传感器网络)的LEACH(低能耗自适应集群层次结构)(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 低能耗自适应集群层次结构(“LEACH”)是一种基于 TDMA 的 MAC 协议,它与无线传感器网络 &a…

私有部署、重构企业软件,第四范式发布大模型“式说”

大模型领域再添重要一员! 4月26日,第四范式首次向公众展示其大模型产品「式说3.0」,并首次提出AIGS战略(AI-Generated Software):以生成式AI重构企业软件。式说将定位为基于多模态大模型的新型开发平台&…

RAC集群节点2异常时节点1的database实例无法提供服务问题的分析

在客户的数据库RAC集群环境中,节点2发生了异常,最终通过重启解决。在节点2发生异常的10分钟左右时间内,由于RAC集群节点2异常,此时节点1的database实例无法提供服务问题,程序操作报超时; 对此现象&#xf…

贪吃蛇小游戏(C++)

首先我们需要下载EasyX(具体的方法在EasyX专栏中有提到) easyX下载和绘制简单基本图形_小梁今天敲代码了吗的博客-CSDN博客 贪吃蛇这个游戏我们一定都玩过,玩家使用方向键操控一条“蛇”,蛇会朝着一个方向不断移动,玩…

开源Qt Ribbon控件——SARibbon的布局思路及介绍

开源Qt Ribbon控件——SARibbon的布局思路及介绍 SARibbon的布局SARibbon名词定义Office布局模式——SARibbonBar::OfficeStyleWPS布局模式——SARibbonBar::WpsLiteStylepannel的布局行数3行模式2行模式 测试案例特别注意 原文链接:https://blog.csdn.net/czyt1988…

Kafka3.0.0版本——生产者数据有序与乱序

目录 一、生产经验数据有序二、生产经验数据乱序2.1、kafka1.x版本之前保证数据单分区有序的条件2.2、kafka1.x版本及以后保证数据单分区有序的条件2.3、kafka1.x版本及以后开启幂等性数据单分区有序的原因 一、生产经验数据有序 单分区内,数据有序。如下图partion…

linux 安装php8.1 ZipArchive和libzip最新版扩展安装

1、概述 安装前咱们先看下我本地环境 [rootelk php8]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo) [rootelk php8]# [rootelk php8]# ./bin/php -v PHP 8.1.18 (cli) (built: Apr 17 2023 13:15:17) (NTS) Copyright (c) The PHP Group Z…

24、LLVM编译流程

一、LLVM 1.1 LLVM概述 LLVM是构架编译器(compiler)的框架系统,以C编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本.LLVM计划启动于2000年,最初由美国…

阳光开朗孔乙己,会否奔向大泽乡

前言 🔥学历对职业关系到底有什么影响呢?🔥学历给我们带来了优势吗?🔥到底是什么造成了"孔乙己的长衫"? 孔乙己是中国清代作家鲁迅创作的一篇短篇小说,发表于1919年。这部作品被认为是…