Ansible-playbook变量学习

news2024/11/19 2:32:35

目录

  • 1.命令行变量赋值
  • 2.在playbook中赋值变量
  • 3.在ansible的清单文件(/etc/ansible/hosts)中定义普通变量
  • 4.在ansible的清单文件(/etc/ansible/hosts)中定义分组变量
  • 5.定义变量到一个文件中
  • 6.在执行playbook的目录创建 group_vars host_vars
  • 7.注册变量

1.命令行变量赋值

#编写playbook  变量名为rpm,格式{{rpm}}
vim app.yml
---
- hosts: web
  tasks:
    - name: install app
      yum: name="{{rpm}}"
    - name: start app
      service:
        name: "{{rpm}}"
        state: started
        enabled: yes

给rpm变量定义为vsftpd

[root@tdm1 playbook]# ansible-playbook app.yml  -e 'rpm=vsftpd'

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [start app] *******************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@tdm1 playbook]# ansible web -m shell -a 'ps -ef | grep vsftpd'
47.93.98.117 | CHANGED | rc=0 >>
root     15665     1  0 16:59 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root     15880 15879  0 16:59 pts/1    00:00:00 /bin/sh -c ps -ef | grep vsftpd
root     15883 15880  0 16:59 pts/1    00:00:00 grep vsftpd

在这里插入图片描述

2.在playbook中赋值变量

#编写playbook,在剧本中定义变量
vim app.yml
---
- hosts: web
  vars:
    - rpm1: httpd
    - rpm2: vsftpd
  tasks:
    - name: install app
      yum: name="{{rpm1}}"
    - name: install app
      yum: name="{{rpm2}}"                                
[root@tdm1 playbook]# ansible-playbook app.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
[root@tdm1 playbook]# ansible web -m shell  -a 'rpm -q httpd vsftpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because
yum, dnf or zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
47.93.98.117 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64
vsftpd-3.0.2-29.el7_9.x86_64

在这里插入图片描述

3.在ansible的清单文件(/etc/ansible/hosts)中定义普通变量

vim /etc/ansible/hosts
[web]
47.93.98.117 rpm1=httpd rpm2=vsftpd

vim app.yml
---
- hosts: web
  tasks:
    - name: install app
      yum: name="{{rpm1}}"
    - name: install app
      yum: name="{{rpm2}}"
[root@tdm1 playbook]# ansible-playbook app.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

在这里插入图片描述

4.在ansible的清单文件(/etc/ansible/hosts)中定义分组变量

vim /etc/ansible/hosts
[web]
47.93.98.117

[web:vars]
rpm1=httpd
rpm2=vsftpd

vim app.yml
---
- hosts: web
  tasks:
    - name: install app
      yum: name="{{rpm1}}"
    - name: install app
      yum: name="{{rpm2}}"
[root@tdm1 playbook]# ansible-playbook  app.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在这里插入图片描述

5.定义变量到一个文件中

vim var.yml    #变量放在该文件中
rpm1: httpd
rpm2: vsftpd

vim app.yml
---
- hosts: web
  vars_files:
    - var.yml     #变量文件,路径写清楚,我存放在了当前路径
  tasks:
    - name: install app
      yum: name="{{rpm1}}"
    - name: install app
      yum: name="{{rpm2}}"
[root@tdm1 playbook]# ansible-playbook app.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@tdm1 playbook]# ansible web -m shell -a 'rpm -q httpd vsftpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because
yum, dnf or zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
47.93.98.117 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64
vsftpd-3.0.2-29.el7_9.x86_64

在这里插入图片描述

6.在执行playbook的目录创建 group_vars host_vars

mkdir group_vars
cd group_vars
vim  web   #创捷和hosts文件下和组一样的文件
rpm1: htpd
rpm2: vsftpd

#创建与组同名的文件
[root@tdm1 playbook]# cat /etc/ansible/hosts 
[web]
47.93.98.117 

在这里插入图片描述

vim app.yml
[root@tdm1 playbook]# cat  app.yml 
---
- hosts: web
  tasks: 
    - name: install app
      yum: name="{{rpm1}}"
    - name: install app
      yum: name="{{rpm2}}"
[root@tdm1 playbook]# ansible-playbook app.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

TASK [install app] *****************************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@tdm1 playbook]# ansible web -m shell -a 'rpm -q httpd vsftpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because
yum, dnf or zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
47.93.98.117 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64
vsftpd-3.0.2-29.el7_9.x86_64

cclear

7.注册变量

注册变量就是将操作结果,包括标准输出和标准错误输出,保存到变量中,然后再根据这个变量的内容来决定下一步的操作,在这个过程中用来保存操作结果的变量叫注册变量

vim test.yml
---
- hosts: web
  tasks:
    - name: test register variables
      shell: uptime
      register: results

    - name: print the register result
      debug: msg="{{ results }}"                       
[root@tdm1 playbook]# ansible-playbook test.yml  

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [test register variables] *****************************************************************************************changed: [47.93.98.117]

TASK [print the register result] ***************************************************************************************ok: [47.93.98.117] => {
    "msg": {
        "changed": true, 
        "cmd": "uptime", 
        "delta": "0:00:00.039581", 
        "end": "2023-08-31 19:54:38.670898", 
        "failed": false, 
        "rc": 0, 
        "start": "2023-08-31 19:54:38.631317", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": " 19:54:38 up 8 days, 11:29,  2 users,  load average: 0.00, 0.02, 0.05", 
        "stdout_lines": [
            " 19:54:38 up 8 days, 11:29,  2 users,  load average: 0.00, 0.02, 0.05"
        ]
    }
}

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

在这里插入图片描述
changed:任务是否对远程主机造成的变更。
delta:任务运行所用的时间。
stdout:正常的输出信息。
stderr:错误信息。
rc:返回值

- hosts: web
  tasks:
    - name: test register variables
      shell: uptime
      register: results

    - name: print the register result
      debug: msg="{{ results.stdout }}"

[root@tdm1 playbook]# ansible-playbook  test.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [test register variables] *****************************************************************************************changed: [47.93.98.117]

TASK [print the register result] ***************************************************************************************ok: [47.93.98.117] => {
    "msg": " 19:55:57 up 8 days, 11:30,  2 users,  load average: 0.00, 0.02, 0.05"
}

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在这里插入图片描述

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

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

相关文章

30个惊艳的数据可视化作品,让你感受“数据之美”!

‍ 在一个信息大爆炸的时代,每天都有很多的新消息、新发现、新趋势向我们狂轰乱炸而来。在这个过程中,我们既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据总是杂乱无章的。 要想数据达到生动有趣、让人一目了…

【C++练习】leetcode刷题训练(中等难度)

【C练习】leetcode刷题训练(中等难度) 1.数组中的第K个最大元素2.前K个高频单词3.单词识别4.字符串相乘5.只出现1次的数字Ⅱ6.栈的弹出压入序列 1.数组中的第K个最大元素 解题思路 1.典型的TOP-K问题(用堆来解决) 2.要求实现时间复杂度为O(N),而我们的优先级队列的时…

【附安装包】Alias AutoStudio2023安装教程

软件下载 软件:AutoStudio版本:2023语言:英文大小:4.81G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.c…

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理(DataSet API&a…

2023年人工景点行业研究报告

第一章 行业概况 1.1 定义及分类 人工景点行业通常指的是设计和构建的为提供娱乐、教育或文化体验的景点。这些景点可能包括主题公园,博物馆,动物园,水族馆,科学中心,历史遗迹,艺术展览等。这个行业通常包…

rpm打包

文章目录 rpm打包 1. rpm打包步骤0)安装打包工具rpm-build和rpmdevtools1)创建初始化目录2)准备打包内容3)编写打包脚本 spec文件4)打包5)安装 rpm打包 1. rpm打包步骤 0)安装打包工具rpm-buil…

python把txt变成list,并且写入xslx文件

需求: 1、把txt文件的内容变成list 2、然后写入excel中 txt文件内容 IP.txt 192.168.199.201,4C8G,200G 192.168.199.202,4C8G,200G 192.168.199.203,4C8G,200G 192.168.199.204,4C8G,200G 192.168.199.205,4C8G,200G192.168.199.206,4C8G,200G 192.168.199.207…

2023年7月京东笔记本电脑行业品牌销售排行榜(京东数据平台)

随着智能手机、平板电脑等移动互联设备的普及,人们对于个人电脑的依赖减轻,加之电脑的更换率较低,因此当前PC端消费市场整体出现疲态,笔记本电脑的出货量不断下降,今年7月份也同样呈现这一趋势。 根据鲸参谋电商数据分…

不使用 ERP有3个隐藏业务风险,一定要知道!

不少中小型企业出于种种原因,推迟了对ERP系统的投资。也许是因为没有一大笔钱购买软件;也许是听说实施项目可能需要几个月甚至几年的时间,而企业没有时间去做这种令人头疼的事情。 因此,中小企业并没有转向ERP系统,而…

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 一: if...elif...elif..else fi多层…

软件测试—测试用例的设计

软件测试—测试用例的设计 测试用例是什么? 首先,测试用例(Test Case)是为了实施测试而向被测试系统提供的一组集合。这组集合包括:测试环境、操作步骤、测试数据、预期结果等要素。 好的测试用例的特征 一个好的测试…

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…

【python爬虫案例】用python爬豆瓣读书TOP250排行榜!

文章目录 一、爬虫对象-豆瓣读书TOP250二、python爬虫代码讲解三、讲解视频四、完整源码 一、爬虫对象-豆瓣读书TOP250 您好,我是 马哥python说 ,一名10年程序猿。 今天我们分享一期python爬虫案例讲解。爬取对象是,豆瓣读书TOP250排行榜数…

2023-08-31 LeetCode每日一题(一个图中连通三元组的最小度数)

2023-08-31每日一题 一、题目编号 1761. 一个图中连通三元组的最小度数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个无向图,整数 n 表示图中节点的数目,edges 数组表示图中的边,其中 edges[i] [ui, vi] ,表示 ui…

暴力递归转动态规划(三)

前两篇暴力递归转动态规划的文章中,都是通过从上到下的一种思路来解决的问题,这篇文章会通过数组从左向右遍历的方式,来将暴力递归转成动态规划。 题目 有两个等长的数组 w[] 和 v[],w[i] 和 v[i] 分别表示 i 号物品的重量和价值…

全球十大安全好用的黄金交易app软件最新排名(综合评测)

随着金融市场的不断发展,黄金交易app软件日益成为投资者不可或缺的工具。然而,面对众多的黄金交易软件,投资者往往感到困惑和难以抉择。本文将根据最新排名,对全球十大安全好用的黄金交易软件进行综合评测,帮助投资者找…

记一次Zip Slip任意文件写漏洞 以及一些参考文章

记一次Zip Slip任意文件写漏洞以及参考文章们 记一次Zip Slip任意文件写漏洞漏洞复现漏洞原理分析扩展延申 参考文章一:Java之解压流(ZipInputStream)参考文章二:Zip Slip VulnerabilityExploitable Application FlowAre you Vuln…

13.10 语义分割 全卷积网络

语义分割是对图像的每个像素分类 全卷积网络采用卷积神经网络实现从图像像素到像素类别的转换,全卷积网络将中间层特征的高和宽转换回输入图像的尺寸(引入转置卷积实现的)。 最终的类别预测与输入图像在像素上一一对应。 全卷积网络模型模型…

day 31 面向对象 成员方法

class 类名称: 类的属类(定义在类中的变量,成员变量) 类的行为(定义在类中的函数,成员方法) # 设计一个类(类比生活中:设计一张等级表) class Student:name Nonegender Nonenatio…

农产品小程序商城搭建宝典

在当今的电子商务时代,农产品小程序商城已经成为了一种新型的电商模式,为许多农产品的生产和销售带来了新的机遇。但是,如何搭建一个功能完善、用户体验优秀的农产品小程序商城呢?下面,我们就来探讨一下。 首先&#x…