容器(第九篇)ansible-playbook

news2024/11/15 19:47:05

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去启动

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

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

相关文章

pytorch搭建LeNet网络实现图像分类器

pytorch搭建LeNet网络实现图像分类器 一、定义LeNet网络模型1&#xff0c;卷积 Conv2d2&#xff0c;池化 MaxPool2d3&#xff0c;Tensor的展平&#xff1a;view()4&#xff0c;全连接 Linear5&#xff0c;代码&#xff1a;定义 LeNet 网络模型 二、训练并保存网络参数1&#xf…

GAMES101笔记 Lecture03 Transformation

目录 Transoformation(变换)Why stuty transformation(为什么要学习变换呢?)2D transformations(2D变换)Scale transformation(缩放变换)Reflection Matrix(反射矩阵)Shear Matrix(切变矩阵) Rotate transformation(旋转变换)Linear Transforms Matrices(线性变换 矩阵) Hom…

Java泛型详解,史上最全图文详解

泛型在java中有很重要的地位&#xff0c;无论是开源框架还是JDK源码都能看到它。 毫不夸张的说&#xff0c;泛型是通用设计上必不可少的元素&#xff0c;所以真正理解与正确使用泛型&#xff0c;是一门必修课。 一&#xff1a;泛型本质 Java 泛型&#xff08;generics&#…

C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

Windows应用程序开发 一、实验目的 初步掌握Windows应用程序的设计方法。掌握常用窗体控件的使用方法。 二、实验内容 1、设计一个Windows应用程序&#xff0c;创建一个用于添加学生个人基本信息的窗体&#xff0c;窗体下方法同时滚动信息“天行健&#xf…

前端学习-html基础

html学习与总结 一、基础认知 1.1.1 认识网页&#xff08;了解&#xff09; ➢ 问题1&#xff1a;网页由哪些部分组成&#xff1f; ✓ 文字、图片、音频、视频、超链接 ➢ 问题2&#xff1a;我们看到的网页背后本质是什么&#xff1f; ✓ 前端程序员写的代码 ➢ 问题3&a…

设计模式的几大原则

设计模式原则 前言一.单一职责原则1.1 定义1.2 例子1.3 总结 二.里氏替换原则2.1 定义1.2 例子1.3 总结 三.依赖倒置原则3.1 定义3.2例子3.3总结 四.接口隔离原则4.1 定义4.2 例子4.3 总结五.迪米特法则5.1 定义5.2 例子5.3 总结 六.开闭原则6.1 定义6.2 例子6.3 结论 前言 设…

MongoDB复制(副本)集实战及其原理分析-04

MongoDB复制集 复制集架构 在生产环境中&#xff0c;不建议使用单机版的MongoDB服务器。 原因如下&#xff1a; 单机版的MongoDB无法保证可靠性&#xff0c;一旦进程发生故障或是服务器宕机&#xff0c;业务 将直接不可用。 一旦服务器上的磁盘损坏&#xff0c;数据会直接丢…

UDS系列-31服务(Routine Control)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍例程控制服务RoutineControl,该服务的目的是Client端使用Routine Control服务来执行定义的步骤序列并获取特定序列的相关结果。这个服务经常在EOL、Bootloader中使用,比如,检查刷写条件是否满足、擦除内存、覆盖正…

post接口请求测试,通俗易懂

目录 前言&#xff1a; GET方法和POST方法传递数据的异同 POST方法如何传递数据 接口测试软件简介 POST请求接口的测试 测试方法 3.保存接口测试用例&#xff0c;生成自动化测试套件 总结 前言&#xff1a; Post请求是HTTP中请求方法之一&#xff0c;用于向服务器提交…

AI 绘画(2):Ai模型训练,Embedding模型,实现“人物模型“自由

文章目录 文章回顾感谢人员题外话Ai绘画公约Ai模型训练硬件要求显存设置查看显存大小显存过小解决方法 视频教程前期准备SD配置设置SD设置配置SD训练配置pt生成训练集收集训练集要求截图软件推荐训练集版权声明一键重命名图片训练图片来源批量修改图片尺寸 开始训练导入训练集&…

MQTTX的使用

1.MQTT介绍 MQTT是一种常用的物联网协议。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅通信协议&#xff0c;用于在物联网&#xff08;IoT&#xff09;和机器对机器&#xff08;M2M&#xff09;通信中传输消息。 MQTT协议被设计用…

013.【排序算法】合并排序法

1. 合并排序法 合并排序法是针对已经排序好的两个或两个以上的数列&#xff0c;通过合并的方式&#xff0c;将其组合成一个大的且排序好的数列。首先是将无序的数列分成若干小份&#xff0c;分若干份的规则就是不断把每段长度除以2&#xff08;对半分&#xff09;&#xff0c;…

Jmeter断言详细使用教程

目录 前言&#xff1a; 断言介绍与使用 响应断言 断言持续时间 XML断言 1、响应断言 2、JSON Assertion 3、Size Assertion&#xff08;见图知意&#xff09; 4、JSR223 Assertion JSR223 Assertion实例&#xff1a; 5、XPath Assertion 6、Compare Assertion 7、断言持续时间…

如何获得忠诚的铁粉

目录 1.选择热门主题 2.提供独特观点&#xff08;原创精神&#xff09; 3.写作风格&#xff08;目录定位分点总结&#xff09; 4.提供有价值的内容 5.总结&#xff1a; &#x1f4e2;导语&#xff1a;赢得铁粉&#xff08;粉丝&#xff09;的支持对于一个作者来说至关重要。…

前端Vue加载中页面动画弹跳动画loading

前端Vue加载中页面动画弹跳动画loading&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13091 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- ref:唯一ref top&#xff1a;距离中间顶部距离 --> <cc-loading ref&…

Postman大势已去,Apifox的时代已到来

目录 前言&#xff1a; 前情简介&#xff1a;亲身经历节选 Code: 403 “将我踢飞” 浓眉大眼的 Swagger 把我欺骗 工作提效的版本答案 为什么是Apifox 贴心为你 写在最后 前言&#xff1a; Apifox是一款基于web的API设计工具&#xff0c;提供了简洁明了的界面和丰富的…

Debezium系列之:Outbox Event Router

Debezium系列之&#xff1a;Outbox Event Router 一、认识Outbox Event Router二、使用发件箱模式进行可靠的微服务数据交换三、双写问题四、发件箱模式五、基于变更数据捕获的实现六、发件箱表七、发送事件到发件箱八、注册 Debezium 连接器九、主题路由十、Apache Kafka 中的…

交叉编译libcurl libosip libeXosip(包含openssl)

交叉编译libcurl ./configure --with-ssl/home/zx/zxapp/openssl-1.1.0l/output --without-zlib --enable-shared --enable-static --hostarm-linux-gnueabihf CCarm-linux-gnueabihf-gcc --prefix$PWD/build 交叉编译openssl ./config no-asm shared -fPIC --prefix/home/…

ColorUI 全网最全使用文档(建议收藏)

Color UI 我想大家都知晓吧&#xff0c;我就不过多阐述了&#xff0c;是 文晓港 大佬开发的一款适应于H5、微信小程序、安卓、ios、支付宝的高颜值&#xff0c;高度自定义的 Css 组件库.&#xff0c;属于出道即巅峰的史诗级大作&#xff0c;众所周知&#xff0c;万物皆可 Color…

【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…