Ansible的脚本-----playbook剧本【上】

目录

1.playbook剧本组成

2.playbook剧本实战演练

2.1 实战演练一:给被管理主机安装httpd服务

2.2 实战演练二:定义、引用变量

2.3 实战演练三:指定远程主机sudo切换用户

2.4 实战演练四:when条件判断

2.5 实战演练五:迭代循环

3.总结


1.playbook剧本组成

(1)Tasks:任务,即通过task调用ansible的模板将多个操作组织在一个playbook中运行
(2)Variables:变量
(3)Templates:模板
(4)Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
(5)Roles:角色

2.playbook剧本实战演练

示例:
vim test1.yaml
---     #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play     #定义一个play的名称,可省略gather_facts: false    #设置不进行facts信息收集,这可以加快执行速度,可省略hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔remote_user: root    #指定被管理主机上执行任务的用户tasks:     #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: test connection    #自定义任务名称ping:     #使用 module: [options] 格式来定义一个任务- name: disable selinuxcommand: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务- name: disable firewalldservice: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式- name: install httpdyum: name=httpd state=latest- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作- name: start httpd serviceservice: enabled=true name=httpd state=startedhandlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块- name: restart httpd    #notify和handlers中任务的名称必须一致service: name=httpd state=restarted
##Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

2.1 实战演练一:给被管理主机安装httpd服务

在ansible服务器主机,给远程被管理主机制作安装httpd服务的剧本文件play1.yam

mkdir playbook
cd playbook/
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: disable selinuxcommand: 'setenforce 0'ignore_errors: true- name: mount cdrommount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted- name: install httpdyum: name=httpd state=latest- name: start httpdservice: name=httpd state=started enabled=yes

运行playbook

ansible-playbook play1.yaml
//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook play1.yaml --syntax-check    #检查yaml文件的语法是否正确
ansible-playbook play1.yaml --list-task       #检查tasks任务
ansible-playbook play1.yaml --list-hosts      #检查生效的主机
ansible-playbook play1.yaml --start-at-task='install httpd'     #指定从某个task开始运行


被控制端验证安装情况

添加触发器

scp /etc/httpd/conf/httpd.conf 192.168.9.114:/opt/ #将httpd服务端下的httpd.conf文件复制到ansible服务器

vim /opt/httpd.conf       ansible服务器
修改42行端口为8080,以便测试
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: name=firewalld state=stopped enabled=no- name: disable selinuxcommand: 'setenforce 0'ignore_errors: true- name: mount cdrommount: src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted- name: install httpdyum: name=httpd state=latest- name: copy config filecopy: src=/opt/httpd.conf dest=/etc/httpd/conf/notify: "reload httpd"- name: start httpdservice: name=httpd state=started enabled=yeshandlers:- name: reload httpdservice: name=httpd state=reloadedansible-playbook play1.yaml --syntax-check
ansible-playbook play1.yaml


被控制端查看端口是否同步

2.2 实战演练二:定义、引用变量

vim play2.yaml
- name: second playremote_user: roothosts: dbserversvars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}ansible-playbook play2.yaml --syntax-check
ansible-playbook play2.yaml


被控制主机验证

使用facts信息做变量

vim play2.yaml- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4}} dest=/opt/ipv4.txtansible-playbook play2.yaml


被控制节点验证

指定子字段名称查看具体内容,获取子字段内容,使用.13.51解释

vim play2.yaml
- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4.network}} dest=/opt/ipv4.txtansible-playbook play2.yaml


被控制节点验证

运行时指定变量

ansible-playbook play2.yaml -e 'myname=zhuxiang'    #在命令行里定义变量


2.3 实战演练三:指定远程主机sudo切换用户

vim /etc/sudoers       #被控制节点为用户授权并设置密码
zhuxiang ALL=(ALL) ALLecho 123456 | passwd --stdin zhuxiang


vim play2.yaml
- name: second playremote_user: zhuxiangbecome: yes                              #2.6版本以后的参数,之前是sudo,意思为切换用户运行become_user: root                        #指定sudo用户为roothosts: dbserversgather_facts: truevars:- myname: wangwang- myclass: xy102tasks:- name: create groupgroup: name={{myclass}}- name: create useruser: name={{myname}} groups={{myclass}}- name: copy filecopy: content={{ansible_default_ipv4.network}} dest=/opt/ipv4.txtansible-playbook play2.yaml -k -K
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码

被控制节点验证

2.4 实战演练四:when条件判断

在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。

vim play3.yaml
- name: third playremote_user: roothosts: webserversgather_facts: truetasks:- name: copy scj.sh to 9.111copy: src=/opt/scj.sh dest=/optwhen: ansible_default_ipv4.address == "192.168.9.111"- name: run sjc.sh on 9.113script: '/opt/scj.sh scj tangjun'when: inventory_hostname != "192.168.9.111"

192.168.9.111节点

192.168.9.113节点

2.5 实战演练五:迭代循环

vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- debug: msg="{{item}}"with_items:- a- b- cansible-playbook  play4.yaml


迭代创建用户

vim play4.yaml- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- name: create usersuser: name={{item}} groups=xy101with_items:- zhang- san- liansible-playbook  play4.yaml


被控制节点验证

vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功

创建多个用户并加入不同组

vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: novars:- mygroups: ["xy1", "xy2", "xy3"]tasks:- name: create groupsgroup: name={{item}}with_items: "{{mygroups}}"- name: create usersuser: name={{item.myname}} groups={{item.myclass}}with_items:- myname: simyclass: xy1- myname: wangmyclass: xy2- myname: wumyclass: xy3
ansible-playbook play4.yaml


被控制节点验证

vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功

3.总结

playbook剧本的格式


vim XXX.yaml   XXX.yml
- name:                        #设置play的名称(一个playbook文件里可以有多个play)hosts:                       #设置执行此play的远程主机组,多个组用 : 分隔remote_user:                 #设置在远程主机执行此play的用户名,默认为rootbecome: yes                  #设置是否需要在远程主机sudo切换执行任务become_user: root            #设置sudo切换的用户,一般为rootgather_facts: true|false     #设置是否收集facts信息,默认为truevars:                        #设置此play中使用的自定义变量- 变量1: 值1- 变量2: 值2tasks:                       #设置此play的任务列表- name:                         #定义任务的名称模块名: 模块参数              #定义此任务要使用的模块和参数(键值对格式 key=value)- name:           模块名: 模块参数ignore_errors: true           #忽略此任务可能的失败(如果不忽略,则任务失败会导致中断后续任务的执行)- name:           模块名: 模块参数when: 条件表达式              #条件表达式成立则执行此任务,不成立则不执行此任务- name:           模块名: 模块参数={{item}}     #循环遍历with_items:                   #定义循环的取值列表- name:           模块名: 模块参数notify: '任务名'              #定义此任务执行状态为changed时要触发的handler任务handlers:                    #设置notify触发的任务- name: 任务名模块名: 模块参数playbook运行命令
ansible-playbook XXX.yaml -u <远程用户> -k--become-user <sudo切换的用户> -K--syntax-check--list-task--list-hosts--start-at-task="任务名"-e "变量=值"模块参数的格式
横向格式:模块名: 参数1=值  参数2={{变量名}}  ....纵向格式:模块名: 参数1: 值参数2: "{{变量名}}"....vars 和 with_items 的格式
#值为纯量类型时:
tasks:
- name:模块名: 参数1={{item}}with_items:- 值1                                 #纵向格式:- 值2....tasks:
- name:模块名: 参数1={{item}}with_items: ["值1", "值2", ....]     #横向格式#先使用vars定义循环取值列表,再用with_items引用vars的变量
vars:
- 变量1:- 值1                                #纵向格式- 值2....
- 变量2: ["值1", "值2", ....]          #横向格式tasks:
- name:模块名: 参数1={{item}}with_items: "{{变量1}}"         #使用with_items引用vars的变量
- name:模块名: 参数1={{item}}with_items: "{{变量2}}"#当值为对象类型(键值对)时:
tasks:
- name:模块名: 参数1={{item.key1}}  参数2={{item.key2}}with_items: - key1: 值1                    #纵向格式key2: 值2- key1: 值3key2: 值4....with_items:- {key1: 值1, key2: 值2}      #横向格式- {key1: 值3, key2: 值4}....vars:
- 变量1: - key1: 值1                    #纵向格式key2: 值2- key1: 值3key2: 值4....
- 变量2:- {key1: 值1, key2: 值2}      #横向格式- {key1: 值3, key2: 值4}....
tasks:
- name:模块名: 参数1={{item.key1}}  参数2={{item.key2}}with_items: "{{变量1}}"	

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

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

相关文章

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

一 背景介绍 无线传感器网络&#xff08;Wireless Sensor Network, WSN&#xff09;作为远程环境监测系统应用的关键技术&#xff0c;能够在有限的能源供应下提供高效的传感和通信服务。覆盖控制是保证高效通信和可靠数据传输的重要手段。鉴于复杂的物理环境限制了节点部署方式…

文本编辑三巨头(grep)

目录 正则表达式 元字符 grep 案例 我在编写脚本的时候发现&#xff0c;三个文本编辑的命令&#xff08;grep、sed、awk&#xff0c;被称为文本编辑三剑客&#xff0c;我习惯叫它三巨头&#xff09;用的还挺多的&#xff0c;说实话我一开始学的时候也有些懵&#xff0c;主要…

Unity3D之TCP网络通信(客户端)

文章目录 概述TCP核心类异步机制 Unity中创建TCP客户端Unity中其它脚本获取TCP客户端接受到的数据后续改进 本文将以Unity3D应用项目作为客户端去连接制定的服务器为例进行相关说明。 Unity官网参考资料&#xff1a; https://developer.unity.cn/projects/6572ea1bedbc2a001ef…

2024年平面设计软件:六大选择

无论是与营销还是产品设计&#xff0c;平面设计都是当今各个行业不可或缺的一部分。然而&#xff0c;随着平面设计软件的范围和复杂性的不断扩展&#xff0c;设计师和业余用户可能更难知道哪些工具最能满足他们的需求。 本文将分析当今流行的分析 6 个平面设计 App&#xff0c…

mac清理软件哪个好用免费 MacBook电脑清理软件推荐 怎么清理mac

随着使用时间的增长&#xff0c;mac电脑会积累一些不必要的垃圾文件&#xff0c;这些文件会占用宝贵的存储空间&#xff0c;影响电脑的运行速度和稳定性。因此&#xff0c;定期清理mac电脑的垃圾文件是非常有必要的。市场上有许多优秀的Mac清理软件&#xff0c;包括一些出色的国…

AI产品经理怎样入门?

AI产品经理需要熟悉AI基础知识&#xff0c;包括AI行业现状&#xff0c;数学统计学&#xff0c;AI模型构建和模型基本概念。 之所以需要具备这些知识&#xff0c;是因为实现AI产品必然会涉及相应的AI技术&#xff0c;如果AI产品经理不了解相应技术基础&#xff0c;就不能很好的…

photoshop学习笔记——移动工具

移动工具&#xff0c;可以对图层进行移动&#xff0c;快捷键 V 使用的素材已经放上了&#xff0c;直接下载即可 按住ctrl 可以自动选取&#xff0c;鼠标点击哪个对象&#xff0c;自动选中哪个图层 按住 shift 校正角度&#xff08;只能沿着直线移动&#xff09; 按住 alt 拖…

llama模型,nano

目录 llama模型 Llama模型性能评测 nano模型是什么 Gemini Nano模型 参数量 MMLU、GPQA、HumanEval 1. MMLU(Massive Multi-task Language Understanding) 2. GPQA(Grade School Physics Question Answering) 3. HumanEval llama模型 Large Language Model AI Ll…

网络七层协议之 网桥、网卡、交换机、路由器、网关 作用

OSI七层模型 和 TCP/IP四层模型 数据传输单位、对应的设备 物理层&#xff1a;网线 数据链路层&#xff1a;网卡、网桥、交换机 网路层&#xff1a;路由器、网关 网卡的作用 网卡(Network Interface Card, NIC)是计算机上用于连接网络的硬件设备。 网卡是计算机连接网络、传…

机器学习实战笔记5数据标准化

1.读取csv文件实现特征化 import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler StandardScaler是一个用于标准化特征的工具&#xff0c;通过移除均值并缩放到单位方差来实现。 df pd.read_csv("./p039.csv") df scaler S…

windows10 安装CUDA教程

如何在windows10系统上安装CUDA? 1、查看电脑的NVIDIA版本 nvidia-smi 2、官网下载所需CUDA版本 官网地址:https://developer.nvidia.com/cuda-toolkit-archive 我们所安装的CUDA版本需要小于等于本机电脑的NVIDIA版本。推荐使用迅雷下载,速度会更快哦。 3、安装步骤

《你敢不学习?》numpy库——细细学<2>

续接上集: 1、reshape函数&#xff1a;重塑数组的形状 改变数组的维度 其语法为 numpy.reshape(arr, newshape, orderC) 如下图所示 首先生成一个1到17不包括17的16个元素的数组&#xff0c;然后对这个数组进行重塑&#xff0c;使其成为4行4列的二维数组&#xff0c;注意&…

性价比之争:上海闵行装修公司性价比大比拼

在繁华的上海&#xff0c;装修市场的竞争愈发激烈&#xff0c;业主们在追求品质的同时更加注重性价比。今天&#xff0c;我们就来对比几家知名的上海装修公司&#xff0c;看看哪家能在性价比之战中脱颖而出。 1.即住空间装饰即住空间以其“高质量、高效率”而被受消费者好评&a…

Python 使用TCP\UDP协议创建一个聊天室

server端代码&#xff1a; #encodingutf-8 # 服务端代码 import socketdef server():server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)host socket.gethostname()port 12345server_socket.bind((host, port))server_socket.listen(5)print(等待客户端连接…

C++学习笔记03-对象和类(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…

C#,.NET常见算法

1.递归算法 1.1.C#递归算法计算阶乘的方法 using System;namespace C_Sharp_Example {public class Program{/// <summary>/// 阶乘&#xff1a;一个正整数的阶乘Factorial是所有小于以及等于该数的正整数的积&#xff0c;0的阶乘是1&#xff0c;n的阶乘是n&#xff0…

高效部署Modbus转MQTT网关:Modbus RTU、Modbus TCP转MQTT

钡铼Modbus转MQTT网关&#xff0c;简而言之&#xff0c;就是通过将Modbus协议&#xff08;包括Modbus RTU和Modbus TCP&#xff09;的数据转换为MQTT协议的数据格式&#xff0c;从而实现设备数据的上传和云端控制指令的下发。这一转换过程使得设备能够与基于MQTT协议的云平台进…

Harmony Next -- 通用标题栏:高度自定义,可设置沉浸式状态,正常状态下为:左侧返回、居中标题,左中右均可自定义视图。

hm_common_title_bar OpenHarmony三方库中心仓&#xff1a;https://ohpm.openharmony.cn/#/cn/detail/common_title_bar 介绍 一款通用标题栏&#xff0c;支持高度自定义&#xff0c;可设置沉浸式状态&#xff0c;正常状态下为&#xff1a;左侧返回、居中标题&#xff0c;左…

Vue3分段控制器(Segmented)

效果如下图&#xff1a;在线预览 APIs Segmented 参数说明类型默认值必传block是否将宽度调整为父元素宽度&#xff0c;同时所有选项占据相同的宽度booleanfalsefalsedisabled是否禁用booleanfalsefalseoptions选项数据string[] | number[] | SegmentedOption[][]falsesize控…

Vivado生成网表文件并创建自定义IP

平台&#xff1a;vivado2018.3 应用场景&#xff0c;在设计的过程中&#xff0c;我们一些特定的模块需要交付给别人&#xff0c;但是又不想让他们看到其中的源码。就可以将源码封装成网表和IP文件。 vivado生成网表文件 设置综合。设置-flatten_hierarchy* 为full。 这里可…