图文详解Ansible中的变量及加密

news2024/11/20 11:42:20

文章目录

  • 一、变量命名
  • 二、变量级别
  • 三、.变量设定和使用方式
    • 1.在playbook中直接定义变量
    • 2.在文件中定义变量
    • 3.使用变量
    • 4.设定主机变量和清单变量
    • 5.目录设定变量
    • 6.用命令覆盖变量
    • 7.使用数组设定变量
    • 8.注册变量
    • 9.事实变量
    • 10.魔法变量
  • 四、JINJA2模板
  • 五、 Ansible的加密控制
  • 练习
    • 1.用变量指定用户的各项信息:name,uid,password等
    • 2.事实变量:在受控主机的生成/mnt/hosts文件,包括ip和主机名
    • 3.使用JINJA2在/mnt/hosts中生成ip和主机名


一、变量命名

只能包含数字,下划线,字母
只能用下划线或字母开头

二、变量级别

全局:       从命令行或配置文件中设定的
paly:       在play和相关结构中设定的
主机:       由清单,事实收集或注册的任务

变量优先级设定:
狭窄范围优先于广域范围,即paly>主机>全局

三、.变量设定和使用方式

1.在playbook中直接定义变量

---
- name: test var
  hosts: all
  vars:
  USER: westosuser

在这里插入图片描述
在这里插入图片描述

2.在文件中定义变量

vim user_list.yml
---
user: westosuser

vim westos.yml
---
- name: Create User
  hosts: all
  vars_files:
       - ./user_list.yml

在这里插入图片描述
在这里插入图片描述

3.使用变量

tasks:
  - name: create user
    user:
    name: "{{ USER }}"

在这里插入图片描述

4.设定主机变量和清单变量

在定义主机变量和清单变量时使用

vim inventory
[westos_list1]
172.25.0.254
172.25.0.1
[westos_list2]
172.25.0.2
[westos_list3]
172.25.0.3
[westos_group:children]
westos_list2
westos_list3
[westos_list1:vars]
USER=westos1
[westos_group:vars]
USER=westos2

在这里插入图片描述
在这里插入图片描述

5.目录设定变量

group_vars      ##清单变量,目录中的文件名称与主机清单名称一致
host_vars       ##主机变量,目录中的文件名称与主机名称一致

1.group_vars ##清单变量,目录中的文件名称与主机清单名称一致
在这里插入图片描述
在这里插入图片描述
2.host_vars ##主机变量,目录中的文件名称与主机名称一致
在这里插入图片描述

6.用命令覆盖变量

ansible-playbook user.yml -e "USER=hello"

7.使用数组设定变量

vim user_var.yml
---
USER:
  lee:
    age: 18
    obj: linux
 
 westos:
    age: 20
    obj: java
 
#vim user.yml
- name: Create User
  hosts: all
  gather_facts: no
  vars_files:
      ./user_var.yml
  tasks:
      - name: create user
        shell:
          echo "{{USER['lee']['age']}}"
          echo "{{USER.westos.obj}}"
          
create web vhost
www.westos.com 80 ------ > /var/www/html ------> www.westos.com
linux.westos.com 80 ------> /var/www/virtual/westos.com/linux -----> linux.westos.com

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.注册变量

#register 把模块输出注册到指定字符串中

---
- name: test register
  hosts: 172.25.0.254
  tasks:
    - name: hostname command
      shell:
        hostname
      register: info
    - name: show messages
      shell:
      echo "{{info['stdout']}}"

在这里插入图片描述

9.事实变量

事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息
当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被成为事实变量

---
- name: test register
  hosts: 172.25.0.254
  tasks:
    - name: show messages
      debug:
        msg: "{{ansible_facts['architecture']}}"
        
gather_facts: no       ##在playbook中关闭事实变量收集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.魔法变量

hostvars:               ##ansible软件的内部信息
#eg:
ansible localhost -m debug -a "var=hostvars"

group_names:            ##当前受管主机所在组
#eg:
ansible localhost -m debug -a "var=group_names"

groups:                 ##列出清单中所有的组和主机
#eg:
ansible localhost -m debug -a "var=groups"

inventory_hostname:     ##包含清单中配置的当前授管主机的名称
#eg:
ansible localhost -m debug -a "var=inventory_hostname"

在这里插入图片描述
在这里插入图片描述

四、JINJA2模板

1.介绍

Jinja2是Python下一个被广泛应用的模版引擎
他的设计思想来源于Django的模板引擎,
并扩展了其语法和一系列强大的功能。
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能

相当于在Python中做了一个环境去运行,从而不影响其他的设定
2.j2模板书写规则

{# /etc/hosts line #}       ##注释说明文件用途
127.0.0.1 localhost         ##文件内容
{{ ansible_facts['all_ipv4_addresses'] }} {{ansible_facts['fqdn']}} 
                            ##使用事实变量

在这里插入图片描述

3.for循环

vim users.yml
users:
 - westos
 - linux
 - ansible
 
vim test.j2
{% for NAME in users %}
{{ NAME }}
{%endfor%}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.if 判定

{% for NAME in users if not NAME == "ansible" %}
User number {{loop.index}} - {{ NAME }}
{%endfor%}

loop.index                 ##循环迭代记数从1开始
loop.index0                ##循环迭代计数从0开始

{% for user in students %}
name:  {{user['name']}}
{%if user['age'] is defined%}
age:   {{user['age']}}
{%endif%}
{% if user['age'] is not defined %}
age:   null
{% endif%}
obj:   {{user['obj']}}
{%endfor%}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.#j2模板在playbook中的应用

#playbook1 
---
- name: test register
  hosts: xxxx
  tasks:
    - name: create hosts
      template:
        src: ./xxxx.j2
        dest: /mnt/hosts
#playbook2
---
- name: test.j2
  hosts: 172.25.0.254
  vars:
    students:
      - name: student1
        obj: linux
      - name: student2
        age: 18
        obj: linux
 
  tasks:
    - template:
        src: ./test.j2
        dest: /mnt/list

五、 Ansible的加密控制

#创建建立文件
1.ansible-vault create westos
2.vim westos-vault
lee
ansible-vault create --vault-password-file=westos-valut westos

#加密现有文件
ansible-vault encrypt test

#查看加密文件
ansible-vault view westos
ansible-vault view --vault-password-file=westos-valut westos

#编辑加密文件
ansible-vault edit westos1
ansible-vault edit --vault-password-file=westos-valut westos

##解密文件
ansible-vault decrypt westos                        ##文件永久解密
ansible-vault decrypt westos --output=linux         ##文件解密保存为linux

##更改密码
ansible-vault rekey westos1
ansible-vault rekey westos1 --new-vault-password-file=key1
#playbook#
ansible-playbook apache_install.yml --ask-vault-pass

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

练习

1.用变量指定用户的各项信息:name,uid,password等

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.事实变量:在受控主机的生成/mnt/hosts文件,包括ip和主机名

在这里插入图片描述
在这里插入图片描述

3.使用JINJA2在/mnt/hosts中生成ip和主机名

与事实变量、魔法变量联合使用

在这里插入图片描述
在这里插入图片描述


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

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

相关文章

I2C总线应用测试程序

参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…

yunUI组件库解析:图片上传与排序组件yImgPro

yunUI是笔者开源的微信小程序功能库。目前其中包含了一些复杂的功能组件。方便使用。未来它将分为组件、样式、js三者合为一体,但分别提供。 本文所用代码皆来源于组件库中的yImgPro组件。详细代码可至github查看。地址: yunUI 。 npm地址:yu…

Bing+ChatGPT 对传统搜索引擎的降维打击

早些时候申请了新版 Bing 的内测资格,终于收到了通过的邮件。 一天的体验之后,我的感受是:当新版 Bing 具备了 ChatGPT 的聊天能力之后,它的能力不论是对传统搜索引擎,还是 ChatGPT 自身,都将是降维打击。 …

LeetCode 237. 删除链表中的节点

原题链接 难度:middle\color{orange}{middle}middle 题目描述 有一个单链表的 headheadhead,我们想删除它其中的一个节点 nodenodenode。 给你一个需要删除的节点 nodenodenode 。你将 无法访问 第一个节点 headheadhead。 链表的所有值都是 唯一的&…

IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置

上一篇文章 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 目标 告警恢复通知 - 经过评估无法实现原因: 告警和恢复是单独完全不相关的事件, 告警是 Warning 级别, 恢复是 Normal 级别, 要开启恢复, 就会导致所有 Normal Events 都会被发送, 这个数量是很恐怖的; 而且…

【重排重绘】从输入url到浏览器展示页面发生了什么?

目录步骤如下:一、用户在浏览器搜索栏中输入url地址二、浏览器解析域名得到服务器ip地址浏览器解析域名得到服务器ip地址有哪些过程?三、TCP三次握手建立客户端和服务器的连接四、客户端发送HTTP请求获取服务器端的静态资源五、服务器发送HTTP响应报文给…

程序员深度体验一周ChatGPT发现竟然....

程序员深度体验一周ChatGPT发现竟然… 周一打卡上班,老板凑到我跟前:“小李啊,这周有个新需求交给你做一下,给我们的API管理平台新增一个智能Mock的功能…”。我条件反射般的差点脱口而出:“这个需求做不了…”。不过…

【软件测试】资深测试总结的几个自动化测试点,提升跨越一大步......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 自动化的软件测试与…

PostgreSQL查询引擎——SELECT STATEMENTS SelectStmt

SelectStmt: select_no_parens %prec UMINUS| select_with_parens %prec UMINUS select_with_parens:( select_no_parens ) { $$ $2; }| ( select_with_parens ) { $$ $2; } 该规则返回单个SelectStmt节点或它们的树,表示集合操作树(set-operation tree…

JAVA线程池的使用

一、池化思想和JAVA线程池 池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客 )。 线程池是另一种池化思想的运用,把…

MySQL 派生表产生关联索引auto_key0导致SQL非常的慢

相同的SQL在maridb运行0.5秒,在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时,优化器有个优化参数derived_merge,MySQL7开启添加,默认on.很多情况可以自动优化派生表,避免创建临时索引auto_key0和生成临时表数据做…

C++入门:函数重载

目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑(为什么C可以实现函数重载而C语言不能) 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …

内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程

管家婆软件从网络架构上分两种版本:web(浏览器http端口)访问的版本和客户端(211固定端口sqlserver数据库)访问的版本。公司库管经常用仓库登录管家婆,一旦需要在公司外部登陆访问管家婆客户端,就…

微信中如何接入机器人才比较正常

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 为什么会有这个话题?大家都知道最近有个AI机器人很火,那就是AI机器人,关于它的介绍,大家可以自行百度去,我这边就不多介绍了。 好多人嫌网页版玩的不过瘾,就把这个机器人接入到了QQ上,接入到了钉钉上,TG …

Go语言基础知识学习笔记

环境准备 下载安装Golang:https://golang.google.cn/dl/ 因为国外下载速度较慢,我们需要配置国内代理 # 开启包管理工具 go env -w GO111MODULEon # 设置代理 go env -w GOPROXYhttps://goproxy.cn,direct # 设置不走 proxy 的私有仓库,多…

Ajax?阿贾克斯?

一、Ajax简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的创新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…

供应链挑战迎刃而解!桑迪亚国家实验室使出“量子杀手锏”

桑迪亚国家实验室的科学家Alicia Magann(右),Kenneth Rudinger(左上),Mohan Sarovar(左下)和Matthew Grace(未附图)开发了基于反馈的量子优化算法&#xff08…

“太极”如何利用混部资源,助力腾讯广告降本增效

编者按:近年来, 随着大模型在NLP领域横扫各种大数据磅单取得巨大成功之后,大数据加大模型成为了AI领域建模的标准范式。搜索、广告、推荐的建模也不例外,动辄千亿参数,上T大小的模型成为各大预估场景的标配&#xff0c…

人脸识别——景联文科技提供3D头模数据采集业务!

“拿起手机刷脸解锁、上下班考勤、支付订单,刷脸已极大地便利了我们的生活。清华大学新闻学院教授沈阳表示,中国人平均每天要暴露在各种摄像头下超过500次。人脸识别已成了我们生活中重要的一部分。由于2D人脸识别容易受到姿态、表情、光照等因素影响&am…

痛苦面具,140天备战阿里巴巴,一个疏忽让我前功尽弃...

面试是走的内推途径,因为内推的简历通过率远高于其他方式;我的内推的途径有:联系我在字节跳动工作的一个大学学长。 在线面试,有个线上文本编辑器,类似leetcode那种,可以在线编程。然而有点紧张,视频面试网…