ansible的脚本------playbook剧本

playbook组成部分:

  • 1.task 任务:包含要在目标主机上执行的操作,使用模块定义这些操作。每个都是一个模块的调用。
  • 2.variables 变量:存储和传递数据。变量可以自定义,可以在playbook当中定义为全局变量,也可以外部传参。
  • 3.Templates 模板:用于生成配置文件。模板是包含占位符的文件。占位符有ansible在执行时转化为变量值
  • 4.handlers 处理器:当需要有变更的时候,可以执行触发器。
  • 5.Roles 角色:是一种组织和封装playbook的。允许把相关的任务,变量,模板和处理器组织成一个可复用的单元。

实例模板

安装http并且设置页面内容

cd /opt
vim test1.yml#this is our first playbook
- name: first play
一个name就是一个任务名,名字可以不写。gather_facts: false
是否收集目标主机的系统信息,false就是不收集hosts: 20.0.0.30
执行的目标主机是什么remote_user: root
在目标主机执行的用户tasks: - name: ping testping:- name: close selinuxcommand: '/sbin/setenforce 0'ignore_errors: True- name: close firewalldservice: name=firewalld state=stopped- name: install httpdyum: name=httpd state=latest- name: start httpdservice: enabled=true name=httpd state=started- name: editon index.htmlshell: echo "this is httpd" > /var/www/html/index.htmlnotify: restart httpdhandlers:- name: restart httpdservice: name=httpd state=restartedwq

检查语法是否正确

ansible-playbook test1.yml --syntax-check
检查语法是否正确

错误演示如上图

正确演示如上图

playbook常用脚本命令

ansible-playbook test1.yml --list-task
一般运行会有几个taskansible-playbook test1.yml --list-hosts
检查生效的目标主机

开始运行脚本

ansible-playbook test1.yml
开始运行可以在目标主机   tail -f /var/log/messages
查看

安装成功

此外,我们还可以指定剧本的开始位置

ansible-playbook test1.yml --start-at-task='install httpd'

安装时如何切换用户

#this is our first playbook
- name: first play
一个name就是一个任务名,名字可以不写。gather_facts: false
是否收集目标主机的系统信息,false就是不收集hosts: 20.0.0.30
执行的目标主机是什么remote_user: root
在目标主机执行的用户become: yesbecome_user: roottasks: - name: ping testping:- name: close selinuxcommand: '/sbin/setenforce 0'ignore_errors: True- name: close firewalldservice: name=firewalld state=stopped- name: install httpdyum: name=httpd state=latest- name: start httpdservice: enabled=true name=httpd state=started- name: editon index.htmlshell: echo "this is httpd" > /var/www/html/index.htmlnotify: restart httpdhandlers:- name: restart httpdservice: name=httpd state=restarted

指定声明用户

ansible-playbook test1.yml -u root -k

传参变量

#this is second playbook
声明和引用变量,以及外部传参变量
- hosts: 20.0.0.30remote_user: rootvars:groupname: zzzusername: hjtasks:- name: create groupgroup:name: "{{ groupname }}"system: yesgid: 111- name: create useruser:name: "{{ username }}"uid: 1011group: "{{ groupname }}"shell: /sbin/nologin- name: copy filecopy:content: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"dest: /opt/ky32.txt

"{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}":
获取目标主机IP地址,复制出来放到dest指定的路径中inventory_hostname:目标的主机名
ansible_default_ipv4:获取目标主机名

外部传参

条件判断

when......

when是一个比较常见的应用场景,实现了满足条件即执行,不满足即跳过的任务。

when 满足条件就执行,不满足不执行

指定IP输出   “位置判断”

#this is when test
- hosts: all
可以用主机的IP地址,也可以是用组名,也可以用allremote_user: roottasks:- name: test whendebug:msg: '位置判断'when: ansible_default_ipv4.address == '20.0.0.30

语法和shell差不多,   !=表示不等于,也就是   “除了”

条件满足才会执行

扩展

在20.0.0.30上安装nginx

在20.0.0.50上安装httpd

- hosts: allremote_user: roottasks:- name: nginxyum: name=nginxwhen: ansible_default_ipv4.address == '20.0.0.30'- name: nginx infodebug:msg: "安装nginx"when: ansible_default_ipv4.address == '20.0.0.30'- name: httpyum: name=httpdwhen: inventory_hostname == '20.0.0.50'

playbook当中的循环

ansible有多种循环格式,with_items循环遍历

- hosts: 20.0.0.30remote_user: rootgather_facts: falsetasks:- debug:msg: "{{ item }}"with_items: [a,b,c,d]声明变量item,playbook的内置变量with_items,会把items的值遍历列表当中的a b c d
把item遍历成abcd

如果修改成这样,结果会如何?

相当于 for i in (a,b,c,d,1,2,3,4)

但是with_items还是把两个列表当成整体进行遍历

list循环

touch循环

组循环

组循环,列表当中的值一一对应,打印出来

少的部分会用none补上

列表里的元素定义了循环的次数

第二层列表相当于内循环。

a1,a2,a3,a4.b1,b2,b3,b4.c1,c2,c3,c4,d1,d2,d3,d4

with_items 最常用

with_list 列表分组循环

with_togther 列表对应的列,以数据结合的方式循环

with_nested 相当于双重循环(第一层定义了循环的次数,第二层表示第一层的每个元素会循环几次)

扩展

创建两个用户 test1,test2

他们的组分别是 dn1 dn2


得先创建组

yum一键安装tree,sl,nginx,httpd,vsftpd,dhcp

- name: play1hosts: 20.0.0.50gather_facts: falsetasks:- name: yum infoyum: name={{ item }} state=latestwith_items:- tree- sl- nginx- httpd- vsftpd- dhcp

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

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

相关文章

AI for Science 塑造多学科研究新范式!欢迎参加 WAVE SUMMIT+2023深度学习开发者大会平行论坛

在人工智能飞速发展中,大模型已经崭露头角,引领了新一轮的技术潮流。大模型,凭借其对复杂模式和关系的深度理解能力,展现出在科学研究中的巨大应用潜能。通过大模型,科学家们能更深入地揭示科学现象的内在规律&#xf…

Docker 核心技术

Docker 定义:于 Linux 内核的 Cgroup,Namespace,以及 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器Docke…

K8s攻击案例:RBAC配置不当导致集群接管

01、概述 Service Account本质是服务账号,是Pod连接K8s集群的凭证。在默认情况下,系统会为创建的Pod提供一个默认的Service Account,用户也可以自定义Service Account,与Service Account关联的凭证会自动挂载到Pod的文件系统中。 …

Opencv入门五 (显示图片灰度值)

源码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img_rgb, img_gry, img_cny; cv::namedWindow("Example Gray",cv::WINDOW_AUTOSIZE); cv::namedWindow("Example Canny", cv::WINDOW_…

Leetcode—96.不同的二叉搜索树【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—96.不同的二叉搜索树 算法思想 实现代码 class Solution { public:int numTrees(int n) {vector<int> G(n 1, 0);G[0] 1;G[1] 1;for(int i 2; i < n; i) {for(int j 1; j < i; j) {G[i] G[j - 1] * …

npm login报错:Public registration is not allowed

npm login报错:Public registration is not allowed 1.出现场景2.解决 1.出现场景 npm login登录时,出现 2.解决 将自己的npm镜像源改为npm的https://registry.npmjs.org/这个&#xff0c;解决&#xff01;

MAC苹果笔记本电脑如何彻底清理垃圾文件软件?

苹果电脑以其流畅的操作系统和卓越的性能而备受用户喜爱。然而&#xff0c;随着时间的推移&#xff0c;系统可能会积累大量垃圾文件&#xff0c;影响性能。本文将介绍苹果电脑怎么清理垃圾文件的各种方法&#xff0c;以提升系统运行效率。 CleanMyMac X是一款专业的Mac清理软件…

力扣:203. 移除链表元素(Python3)

题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 …

vue2 el-table 行按钮过多,按钮超出指定个数,显示为下拉菜单(简单的自定义组件)01

vue2 el-table 行按钮过多&#xff0c;按钮超出指定个数&#xff0c;显示为下拉菜单&#xff08;简单的自定义组件01&#xff09; 上图 优化前 按钮太多不美观 优化后 默认展示三个按钮 超出显示下拉菜单 上代码 封装按钮组件 OperateBtn.vue // OperateBtn.vue<templ…

跨境卖家必看!TikTok带货经验分享,TikTok直播带货怎么做?

如今直播带货正发展得如火如荼&#xff0c;不少跨境人也纷纷做起了带货&#xff0c;其中TikTok带货的力量不容小觑&#xff0c;也已经成为了跨境电商运营非常火爆的营销方式&#xff0c;有很多朋友问龙哥TikTok带货怎么做&#xff0c;其实以龙哥这么多年的经验来看&#xff0c;…

智能物联网汽车3d虚拟漫游展示增强消费者对品牌的认同感和归属感

汽车3D虚拟展示系统是一种基于web3D开发建模和VR虚拟现实技术制作的360度立体化三维汽车全景展示。它通过计算机1:1模拟真实的汽车外观、内饰和驾驶体验&#xff0c;让消费者在购车前就能够更加深入地了解车辆的性能、特点和设计风格。 华锐视点云展平台是一个专业的三维虚拟展…