ansible-playbook

Ansible 的脚本 — playbook 剧本

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

apache的剧本:
在这里插入图片描述

运行playbook:

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

定义、引用变量:

  • name: second play
    hosts: dbservers
    remote_user: root
    vars: #定义变量
    • groupname: mysql #格式为 key: value
    • username: nginx
      tasks:
    • name: create group
      group: name={{groupname}} system=yes gid=306 #使用 {{key}} 引用变量的值
    • name: create user
      user: name={{username}} uid=306 group={{groupname}}
    • name: copy file
      copy: content=“{{ansible_default_ipv4}}” dest=/opt/vars.txt #在setup模块中可以获取facts变量信息

ansible-playbook test1.yaml -e “username=nginx” #在命令行里定义变量

#指定远程主机sudo切换用户(become):

  • hosts: dbservers
    remote_user: zhangsan
    become: yes #2.6版本以后的参数,之前是sudo,意思为切换用户运行
    become_user: root #指定sudo用户为root
    执行playbook时:ansible-playbook test1.yml -k -K

when条件判断:

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

//when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务(特殊的任务给特殊的主机执行)

  • name:

    tasks:
    • name: XXXX
      模块: …
      when: 变量名 条件运算符 “值” when判断结果为true才会执行当前任务,false不执行任务
      == != >= <=

迭代(相当于循环):
Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。

横向格式:
user: name=zhangsan groups={{item}}

纵向格式:
user:
name: zhangsan
groups: “{{item}}”

with_items 的编写格式
横向格式:
值为纯量时
with_items: [“a”, “b”, “c”]

值为纯量对象时
with_items:

  • {key1: value1, key2: value2}
  • {key1: value3, key2: value4}

纵向格式:
值为纯量时
with_items:

  • a
  • b
  • c

值为纯量对象时
with_items:

  • key1: value1
    key2: value2
  • key1: value3
    key2: value4

循环(迭代)其他:
with_items with_flattened with_list loop

  • a
  • b
  • c
    在处理单层列表(每个列表只有一个元素)时,上面几个循环结构体是没有区别的,都会把每个列表的值遍历一遍

with_items with_flattened with_list loop

  • [a, b, c]
  • [1, 2, 3]
  • [A, B, C]
    在处理嵌套的多层列表(每个列表只有多个元素)时,with_items 和 with_flattened 会将嵌套列表拉平扩展,将循环处理所有的元素
    with_list 和 loop 不会嵌套列表拉平扩展,只会按照最外层的列表进行循环处理

with_together 将几个列表的元素对齐合并后输出,比如第一个列表的第一个元素和第二个列表的第一个元素合并输出
第一个列表的第二个元素和第二个列表的第二个元素合并输出

with_nested 和 with_cartesian 将每个列表的元素分别组合循环输出,比如 a1A a1B a1C a2A a2B a2C …

运行playbook

ansible-playbook XXX.yaml --syntax-check 检查剧本的语法是否正确
–list-task 列出剧本里的所有任务
–list-hosts 列出剧本在哪些主机执行
–start-at-task=‘任务名称’ 指定从哪个任务开始执行

template模板模块:
1)先要准备一个 xxx.j2 模板文件,在文件中使用 {{变量名}} 引用主机变量 或者 vars自定义的变量 及 facts 字段的值
2)在 playbook 中的 tasks 中定义 template 模板配置 template: src=XXX.j2 dest=XXX

tags模块:
根据 tags 标签仅执行拥有指定 tags 标签的任务,always 标签在指定任意标签时都会执行

  • name:

    tasks:
    • name: XXXX
      模块:
      tags:

      • 标签1
      • 标签2
    • name: XXXX
      模块:
      tags:

      • always

ansible-playbook --tags=“标签” XXX.yaml

角色 roles 的作用?

把 playbook 里的各个 play 看作为角色,将各个角色的 tasks 任务、vars 变量、templates 模块、files 文件等内容放置到角色的目录中统一管理,需要的时候可在 playbook 中直接使用 roles 调用,所以 roles 可以实现代码的复用。

用roles运行一个nginx:

前期准备:

mkdir /etc/ansible/roles/nginx
mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta}

touch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml

①本地安装nginx,复制/etc/nginx/conf.d/default.conf到/etc/ansible/roles/nginx/template/default.conf.j2
修改里面的监听、host、php的内容等等

②在/etc/ansible/roles/nginx/vars/main.conf增加变量值

③在tasks里面添加init.yml
内容:

  • name: disable selinux
    command: ‘/usr/sbin/setenforce 0’
    ignore_errors: true(如果关了忽略)

  • name: disable firewalld
    service: name=firewalld enabled=no state=stopped

④把/etc/yum.repos.d/nginx.repo复制到/etc/ansible/roles/nginx/files里面
并且创建index.php

<?php phpinfo(); ?>

⑤编写task里面的main.yml

  • include: init.yml

  • name: copy nginx.repo file
    copy: src=nginx.repo dest=/etc/yum.repos.d

  • name: yum nginx
    yum: name=nginx state=latest

  • name: copy index.php
    copy: src=index.php dest={{root_dir}}

  • name: copt template file
    template: src=default.conf.j2 dest=/etc/nginx/conf.d/default.conf
    notify: restart nginx

  • name: start nginx
    systemd: name=nginx enabled=true state=started

⑥编写/etc/ansible/roles/nginx/handles里面的main.conf文件

  • name: restart nginx
    service: name={{pkg}} state=restarted

⑦在ansible底下创建playbook,里面创建lnmp.yml

  • name: nginx lnmp
    hosts: webservers
    remote_user: root
    roles:
    • nginx

⑧在palybook下使用:ansible-playbook lnmp.nginx去启动

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

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

相关文章

attention unet + cldice 论文总结

Blood Vessel Segmentation from Low-Contrast and Wide-Field Optical Microscopic Images of Cranial Window by Attention-Gate-Based Network论文总结 论文&#xff1a;Blood Vessel Segmentation by Attention-Gate-Based Network 目录 一、论文背景和出发点 二、创新点…

网络端口地址转换 NAPT 配置

你是某公司的网络管理员&#xff0c;公司办公网需要接入互联网&#xff0c;公司只向 ISP 申请了一条专线&#xff0c;该专线分配了一个公司 IP 地址&#xff0c;配置实现全公司的主机都能访问外网。 技术原理 NAT 将网络划分为内部网络和外部网络两部分&#xff0c;局域网主机…

基于spss的多元统计分析 之 实例3(血压、胆固醇于心脏病关系的研究)(8/8)

血压、胆固醇于心脏病关系的研究 摘要 一般线性模型中的一种&#xff0c;即反应变量 (dependent variables)为二分类变量的回归分析&#xff0c;模型输出为变量取特定值的概率。 在进行二元Logistic回归分析时&#xff0c;通常会涉及3个步骤&#xff0c;分别是数据处理、卡方分…

青翼科技自研模块化互联产品 • 模拟采集FMC子卡【产品资料】

FMC122是一款基于FMC标准规范&#xff0c;实现2路16-bit、1GSPS ADC同步采集&#xff0c;2路16-bit 2.5GSPS DAC同步回放功能子卡模块。该模块遵循VITA57.1标准&#xff0c;可直接与FPGA载卡配合使用&#xff0c;板卡ADC器件采用TI的ADS54J60芯片&#xff0c;该芯片具有两个模拟…

同一 tomcat 不同项目 session 共享实现

说明 这里仅讨论 同一个tomcat&#xff0c;部署了两个工程&#xff08;两个war包&#xff09;。不涉及不同tomcat,不涉及集群 背景 tomcat中的工程A包含用户登录、退出、权限控制等功能&#xff1b;工程B包含业务功能接口。工程A将用户登录信息加密响应给前端&#xff0c;前…

一个例子带你了解MapReduce

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

RT-DETR论文解读与代码

1.概述 目前以大名鼎鼎的YOLO为代表的基于CNN的实时监测网络需要NMS进行后处理&#xff0c;导致不能很好的优化网络&#xff0c;并且网络不够健壮&#xff0c;从而导致检测器的推理速度出现延迟。研究者也分析了Anchor-based和Anchor-free的YOLO的性能&#xff0c;发现Anchor并…

Java多线程与并发-原理

1、synchronized 线程安全问题的主要诱因 存在共享数据&#xff08;也称临界资源&#xff09;。存在多条线程共同操作这些共享数据。 解决问题的根本方法&#xff1a; 同一时刻有且只有一个线程在操作共享数据&#xff0c;其他线程必须等到该线程处理完数据后再对共享数据进…

Django之模板层

一、模板简介 在刚刚介绍完的视图层中我们提到&#xff0c;浏览器发送的请求信息会转发给视图进行处理&#xff0c;而视图在经过一系列处理后必须要有返回信息给浏览器。如果我们要返回html标签、css等数据给浏览器进行渲染&#xff0c;我们可以在视图中这么做 from django.s…

【Spring】核心与设计思想

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

20230622作业:字符设备驱动内部实现原理及流程

1.1字符设备驱动内部实现原理 1>用户打开设备open("~/dev/mycdev",O_RDWR);("路径"&#xff0c;打开方式)2>在内核的虚拟文件系统层会同步执行sys_open函数,实现如下操作3>根据open函数的路径&#xff0c;找到struct inode结构体4>在struct…

基于ASP.NET MVC的网络书店系统/书店商城

摘 要 随着书店规模的不断扩大&#xff0c;人流数量的急剧增加&#xff0c;有关书店的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有网络书店来提高书店工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速查询&#xff0c;从而减少…

【深度学习】5-3 与学习相关的技巧 - Batch Normalization

如果为了使各层拥有适当的广度&#xff0c;“强制性”地调整激活值的分布会怎样呢&#xff1f;实际上&#xff0c;Batch Normalization 方法就是基于这个想法而产生的 为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点&#xff1a; 可以使学习快速进行(可以增大学习…

Web安全——HTML基础

HTML 一、对于前端以及后端的认识以及分析二、HTML认知1、网页的组成2、浏览器3、Web标准 三、简单的HTML页面架构四、HTML常见标签1、meta标签2、标题标签3、文本属性4、form表单5、a 标签6、锚文本7、img 标签8、table 表格9、列表标签9.1、无序列表9.2、有序列表 10、框架的…

Java性能权威指南-总结14

Java性能权威指南-总结14 堆内存最佳实践对象生命周期管理对象重用 堆内存最佳实践 对象生命周期管理 在很大程度上&#xff0c;Java会尽量减轻开发者投入到对象生命周期管理上的精力&#xff1a;开发者在需要的时候创建对象&#xff0c;当不再需要这些对象时&#xff0c;它们…

Java 被挤出前三。。

TIOBE 2023 年 06 月份的编程语言排行榜已经公布&#xff0c;官方的标题是&#xff1a;Python 还会保持第一吗&#xff1f;&#xff08;Will Python remain number 1?&#xff09; 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于…

浅谈C++|引用篇

目录 引入 一.引用的基本使用 (1)引用的概念&#xff1a; (2)引用的表示方法 (3)引用注意事项 (4)引用权限 二.引用的本质 三.引用与函数 (1)引用做函数参数 (2)引用做函数返回值 四.常量引用 五.引用与指针 引入 绰号&#xff0c;又称外号&#xff0c;是人的本名以外…

【k8s系列】一分钟搭建MicroK8s Dashboard

本文基于上一篇文章的内容进行Dashboard搭建&#xff0c;如果没有看过上一篇的同学请先查阅上一篇文章 k8s系列】使用MicroK8s 5分钟搭建k8s集群含踩坑经验 使用MicroK8s搭建Dashboard很简单&#xff0c;只需要在Master节点按照以下几步操作 1.启用Dashboard插件 microk8s en…

【软件工程】软件工程期末考试复习题

软件工程期末考试试题及参考答案 一、单向选择题 1、软件的发展经历了&#xff08;D&#xff09;个发展阶段。 一二三四 2、需求分析的任务不包括&#xff08;B&#xff09;。 问题分析系统设计需求描述需求评审。 3、一个软件的宽度是指其控制的&#xff08;C&#xff0…

[进阶]TCP通信综合案例:群聊

代码演示如下&#xff1a; 客户端&#xff1a; public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启&#xff01;");//1.创建Socket对象&#xff0c;并同时请求与服务端程序的连接。Socket socket new…