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

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

playbook组成部分:

1、tasks任务:包含要在目标主机上执行的操作,使用模块定义这些操作。每个任务都是一个模块的调用

2、variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量,也可以外部传参

3、Templates模板:用于生成配置文件。模板是包含占位符的文件,占位符由ansible在执行时转化为变量值

4、handlers处理器:当需要有变更的时候,可以执行触发器

5、Roles角色:是一种组织和封装playbook的,允许把相关的任务,变量,模板和处理器组织成一个可复用的单元

playbook的条件判断:

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

when是满足条件即执行,不满足不执行

循环:

ansible有多种循环模式,

with_items:循环遍历

with_list:列表分组循环

with_together:列表对应的列,数据结合的方式循环

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

实例模板:

要先vim /etc/ansible/hosts让他们主机之间ping的通

再写一个yml的配置文件

#this is our first playbook

- name: first play

  gather_facts: false

  hosts: 192.168.233.20

  remote_user: root

  tasks:

   - name: ping test

     ping:

   - name: close selinux

     command: '/sbin/setenforce 0'

     ignore_errors: True

   - name: close firewalld

     service: name=firewalld state=stopped

   - name: install httpd

     yum: name=httpd

   - name: start httpd

     service: enabled=true name=httpd state=started

   - name: editon index.html

     shell: echo "this is httpd" > /var/www/html/index.html

     notify: restart httpd

  handlers:

   - name: restart httpd

     service: name=httpd state=restarted

检查yml的语法是否正确

运行脚本

指定任务从哪一步开始

切换用户实验:

要先vim /etc/ansible/hosts让他们主机之间ping的通

再写一个yml的配置文件

#this is our first playbook

- name: first play

#一个name就是一个任务名,名字可以不写

  gather_facts: false

#是否收集目标主机的系统信息,false就是不收集

  hosts: 192.168.233.20

#执行的目标主机是20

  remote_user: dn

  become: yes

#切换用户

  become_user: root

#在目标主机执行的用户

  tasks:

   - name: ping test

     ping:

   - name: close selinux

     command: '/sbin/setenforce 0'

     ignore_errors: True

   - name: close firewalld

     service: name=firewalld state=stopped

   - name: install httpd

     yum: name=httpd

   - name: start httpd

     service: enabled=true name=httpd state=started

   - name: editon index.html

     shell: echo "this is httpd" > /var/www/html/index.html

     notify: restart httpd

  handlers:

   - name: restart httpd

     service:name=httpd state=restarted

打开配置文件,71行取消注释

指定用户,输入密码

也可以不在脚本里声明用户,在命令行输入用户

声明和引用变量,以及外部传参变量实验:

#this is second playbook!

#声明和引用变量,以及外部传参变量

- hosts: 192.168.233.20

  remote_user: root

  vars:

    groupname: guoqi

    username: wangdefu

  tasks:

   - name: create group

     group:

       name: "{{ groupname }}"

       system: yes

       gid: 111

   - name: create user

     user:

       name: "{{ username }}"

       uid: 1011

       group: "{{ groupname }}"

       shell: /sbin/nologin

   - name: copy file

     copy:

       content: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"

#获取目标主机的IP地址,然后打印,复制到目标文件

       dest: /opt/ky32.txt

"{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"

包含所有主机变量的字典

inventory_hostname:目标的主机名

ansible_default_ipv4:获取目标主机名

['ansible_default_ipv4']['address']:索引

用-e往ansible-playbook里面传参数

条件判断实验:

#this is when test

- hosts: all

#可以用主机的IP地址,也可以使用组名,也可以用all

  remote_user: root

  tasks:

   - name: test when

     debug:

       msg: '位置判断'

     when: ansible_default_ipv4.address == '192.168.233.20'

(做这些之前要先在/etc/ansible/hosts里面把其他的IP地址删掉)

取反

#this is when test

- hosts: all

#可以用主机的IP地址,也可以使用组名,也可以用all

  remote_user: root

  tasks:

   - name: test when

     debug:

       msg: '位置判断'

#echo $a echo ok echo 123 debug=echo msg:输出的内容,用于脚本的调试,在正式脚本中要去除

     when: ansible_default_ipv4.address != '192.168.233.20'

实验安装nginx和httpd:

20安装nginx

30安装httpd

- hosts: all

  remote_user: root

  tasks:

   - name: nginx

     yum: name=nginx

   - name: nginx info

     debug:

       msg: "安装nginx"

(两个选一个用)

循环

- hosts: 192.168.233.30

  remote_user: root

  gather_facts: false

  tasks:

   - debug:

       msg: "{{ item }}"

     with_items: [a,b,c,d]

#声明变量item,playbook的内置变量,with_items,会把item的值,遍历>列表当中的a,b,c,d

定义两个列表,但是会一块遍历打印出来

- hosts: 192.168.233.30

  remote_user: root

  gather_facts: false

  tasks:

   - debug:

       msg: "{{ item }}"

     with_items:

      - [a,b,c,d]

      - [1,2,3,4]

#声明变量item,playbook的内置变量,with_items,会把item的值,遍历>列表当中的a,b,c,d

#虽然我声明的列表是两个,但是with_items还是把两个列表当成整体进行

遍历

分组打印:

- hosts: 192.168.233.40

  remote_user: root

  gather_facts: false

  tasks:

   - debug:

       msg: "{{ item }}"

     with_list:

      - [a,b,c,d]

      - [1,2,3,4]

遍历循环在主机上创建文件实验:

双重循环实验:

- hosts: 192.168.233.40

  remote_user: root

  gather_facts: false

  tasks:

   - debug:

       msg: "{{ item }}"

     with_nested:

      - [a,b,c,d]

      - [1,2,3,4]

#列表里面的元素定义了循环的次数,第二层列表相当于内循环

一键yum安装tree sl nginx httpd vsftpd dhcp软件:

- name: play1

  hosts: 192.168.233.40

  gather_facts: false

  tasks:

    - name: yum

      yum: name= {{item}}

      with_list:

        - tree

        - sl

        - nginx

        - httpd

        - vsftpd

        - dhcp

创建test1 2 3,然后把源主机的test1 2 3发给目标主机 再给一个判断的实验:

两个都可以用

Templates模块:

Jinja模板架构,通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去

生成一个目标文本文件,传递变量到需要的配置文件当中(web开发)

声明占位符之后,往httpd里面塞东西实验:

- hosts: all

  remote_user: root

  vars:

    - package: httpd

    - service: httpd

  tasks:

    - name: install httpd

      yum: name={{package}}

    - name: install configure file

      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

      notify:

        - restart httpd

    - name: cfreate root_dir

      file:

        path: /etc/httpd/htdocs

        state: directory

    - name: start httpd

      service: name={{service}} enabled=true state=started

  handlers:

    - name: restart httpd

     service: name={{service}} state=restarted

最下面的service要和上面的service对齐

httpd.conf.j2在文件当中配置的是占位符(声明的变量)

/etc/ansible/hosts 配置了主机的占位符名称和j2文件中的占位符一致(定义参数:占位符的参数的参数声明好)

playbook当中,用template模块来把参数传给目标的主机的配置文件

nginx实验:

端口号改成8080

root目录改成/opt/nginx/html

(其他步骤与http一样)

tags模块:

标签模块:标签模块,可以在playbook当中为任务设定标签(tags),我们在运行playbook时可以通过指定任务标签,来实现只运行设定的标签任务

例如:

- name

 tags:

   debug

--start-at-task=‘wdf’

任务标签的种类:

always:不管你是否指定了运行标签,任务都会执行

never:即使运行了指定标签,该任务也不会执行

debug:调试任务

setup:收集主机信息

自定义标签:

per_tasks:指定标签之前的任务

post_tasks:运行指定标签之后的任务

Roles模块:

roles又称为角色

ansible层次化,结构化的组织playbook,使用了rolse(角色)

可以根据层次结构,自动装载变量文件,task,以及handlers等等

roles:分别把变量 文件 任务 模块以及处理器,放在单独的目录当中,使用rolse模块来一键调用这些文件

roles:

-------web-------总目录,角色

files  存放copy和sript模块调用的文件

templates  存放j2的模板文件

tasks 包含任务的目录

--------main.yml  角色运行的任务

handlers包含处理器的目录

---------main.yml

vars 存放变量的目录

---------main.yml

defaults 包含默认变量的目录

----------main.yml

meta包含元信息的目录

-----------main.yml

site.yml用来调用所有的配置文件

安装三个服务:

http

mysql

php

 

然后在20主机查看httpd、nginx、mysql

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

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

相关文章

C++ STL——栈和队列(stack queue)

本节目标 1.stack的介绍和使用及其模拟实现 2.queue的介绍和使用及其模拟实现 3.priority_queue的介绍和使用及其模拟实现 4.容器适配器 1.stack的介绍和使用及其模拟实现 1.1 stack的介绍 stack的文档介绍 根据stack的文档介绍可以知道,stack是一种容器适配器…

docker安装Elasticsearch:8.2和kibana:8.2

前置:es8和7的版本有区别,8的版本比7在安装的时候多了安全校验,本文主要跳过安全校验 主要参考:Docker下elasticsearch8部署、扩容、基本操作实战(含kibana) - 知乎 1.安装es -e xpack.security.enabledfalse主要关闭安全校验 docker pull elasticse…

Springboot优雅实现对接口返回统一封装

前端在调用后端接口时往往不同的接口返回的数据是不一样的,但是通常我们会与前端约定一个固定的返回格式,通过固定的格式告诉他们什么时候接口是返回成功,什么时候返回失败,返回成功后他们如何拿到接口返回的数据去渲染前端页面。…

使用代理服务器和Beautiful Soup爬取亚马逊

概述 Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库,它能够从网页中提取数据,并提供了一些简单的方法来浏览文档树、搜索特定元素以及修改文档的内容。在本文中,我们将介绍如何使用代理服务器和Beautiful Soup库来爬取亚马逊…

5 分钟内搭建一个免费问答机器人:Milvus + LangChain

搭建一个好用、便宜又准确的问答机器人需要多长时间? 答案是 5 分钟。只需借助开源的 RAG 技术栈、LangChain 以及好用的向量数据库 Milvus。必须要强调的是,该问答机器人的成本很低,因为我们在召回、评估和开发迭代的过程中不需要调用大语言…

【接口测试】HTTP接口详细验证清单

概述 当我们在构建、测试、发布一套新的HTTP API时,包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。 即使你对每一个组件都有深刻的理解,也可能会有太多的信息在你的脑海中出现。 以至于我们不可能一下把所有的信息进行梳理…

python如何更改代码背景图片,背景主题(黑色护眼)和各类文本颜色(python进阶必看,爱了爱了)

一、在 PyCharm 中设置图片背景的方法如下: 打开 PyCharm 的设置窗口,在设置窗口中找到 "Appearance & Behavior" -> "Appearance" 选项卡。在 "Appearance" 选项卡中,找到 "Background Image&qu…

Python学习之复习MySQL-Day8(事务)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!事务简介事务操作模拟转账操作开启事务提交事务回滚事务查看/设置事务提交方法实例演示 事务四大特性并发事务问题分类 事务隔离级别分类查看/设置事务隔离级别实例演示 文章声明⭐⭐⭐ 该文章为我(有编程语…

Mysql的SQL优化和锁

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

闫式Dp分析法(一种求解动态规划问题的思路)

最近一直跟着Acwing学习动态规划问题的求解思想,感觉晦涩的算法问题一旦经过闫式Dp分析法的剖析,瞬时迎刃而解,故今天我觉得很有必要再次分享一下闫式Dp分析法(在此默认你对DP问题有了一定的了解)。 闫式Dp分析法 闫式…

前端问题记录

jenkins安装vue依赖报错 jenkins 安装依赖,报错cannot find module ‘/root/.jenkins/workspace/项目路径/node_modules/xxxx’,如图上 解决:执行 npm install vue/cli-service --unsafe-perm,再执行npm i

你以为出现NoClassDefFoundError错误会是什么原因?

你以为出现NoClassDefFoundError错误会是什么原因? 1、概述2、事情经过3、总结 1、概述 大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。 同样的错误,非一样的解决方式。NoClassDefFou…

【sgDragUploadFolder】自定义组件:自定义拖拽文件夹上传组件,支持上传单个或多个文件/文件夹,右下角上传托盘出现(后续更新...)

特性&#xff1a; 支持在拖拽上传单个文件、多个文件、单个文件夹、多个文件夹可自定义headers可自定义过滤上传格式可自定义上传API接口支持显示/隐藏右下角上传队列托盘 sgDragUploadFolder源码 <template><div :class"$options.name" :dragenter"i…

使用Gitee中的CI/CD来完成代码的自动部署与发布(使用内网穿透把本地电脑当作服务器使用)

&#x1f4da;目录 &#x1f4da;简介:⚙️ 所需工具&#xff1a;&#x1f4a8;内网穿透配置&#x1f4ad;工具介绍✨命令安装&#x1f38a;配置Cpolar&#x1f573;️关闭防火墙&#x1f95b;防火墙端口放行规则&#xff08;关闭防火墙可以忽略&#xff09;&#x1f36c;小章总…

WCF服务总结

前言 WCF,全称为Windows Communication Foundation,是一种用于构建分布式应用程序的微软框架。它提供了一种统一的编程模型,用于构建服务导向的应用程序,这些应用程序可以在本地或远程计算机上运行。WCF 支持多种传输协议和编码格式,并提供了高级安全性、可靠性和事务处理…

微软在 Perforce Helix 核心服务器中发现4个安全漏洞

微软分析师在对Perforce Helix的游戏开发工作室产品进行安全审查时&#xff0c;发现为游戏、政府、军事和技术等部门广泛使用的源代码管理平台 Perforce Helix Core Server 存在四大漏洞&#xff0c;并于今年 8 月底向 Perforce 报告了这些漏洞&#xff0c;其中一个漏洞被评为严…

路径规划之RRT *算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之A *算法 路径规划之D *算法 路径规划之PRM算法 路径规划之RRT算法 路径规划之RRT *算法 路径规划之RRT*算法 系列文章目录前言一、RRT算法1.起源2.改进2.1 重新选择父节点2.2 重新布线 3.对比…

day44代码训练|动态规划part06

完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 1. dp数组的含义 dp[i][j] 0-i物品&#xff0c;重量为j的容量时&#xff0c;最大的价值 2. 递推公式 dp[i][j] max(dp[i-1][j],dp[i][j-weight[i]]value[i]); 两种状态&#xff0c;不用物品i的话&…

【数论】质数

试除法判断质数 分解质因数 一个数可以被分解为质因数乘积 n &#xff0c;其中的pi都是质因数 那么怎么求pi及其指数呢&#xff1f; 我们将i一直从2~n/i循环&#xff0c;如果 n%i0&#xff0c;那么i一定是质因数&#xff0c;并且用一个while循环将n除以i&#xff0c;一直到…

蛇梯棋[中等]

一、题目 给你一个大小为n x n的整数矩阵board&#xff0c;方格按从1到n2编号&#xff0c;编号遵循 转行交替方式 &#xff0c;从左下角开始 &#xff08;即&#xff0c;从board[n - 1][0]开始&#xff09;每一行交替方向。玩家从棋盘上的方格1&#xff08;总是在最后一行、第…