Linux6.21 ansible playbook 剧本

news2024/11/10 15:36:00

文章目录

  • 计算机系统
    • 5G云计算
      • 第一章 LINUX ansible playbook 剧本
        • 一、概述
        • 二、playbook应用
          • 1.示例
          • 2.运行playbook
          • 3.定义、引用变量
          • 4.指定远程主机sudo切换用户
          • 5.when条件判断
          • 6.迭代
          • 7.Templates 模块
          • 8.tags 模块

计算机系统

5G云计算

第一章 LINUX ansible playbook 剧本

一、概述

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

二、playbook应用

管理端:192.168.58.60			ansible
被管理端:192.168.58.61
被管理端:192.168.58.62
被管理端:192.168.58.63
1.示例
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 selinux
     command: '/sbin/setenforce 0'    #command模块和shell模块无需使用key=value格式
     ignore_errors: True     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped    #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration file for httpd
     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    #这里需要一个事先准备好的/opt/httpd.conf文件
     notify: "restart httpd"    #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:     #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted
##Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

在这里插入图片描述

2.运行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开始运行

在这里插入图片描述
在这里插入图片描述

3.定义、引用变量
- 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=2800    #使用 {{key}} 引用变量的值
   - name: create user
     user: name={{username}} uid=2800 group={{groupname}} 
   - name: copy file
     copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt    #在setup模块中可以获取facts变量信息


ansible-playbook test2.yaml -e "username=nginx"     #在命令行里定义变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.when条件判断

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

###when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务
vim test2.yaml
---
- hosts: all
  remote_user: root
  tasks:
   - name: shutdown host 
     command: /sbin/shutdown -r now
     when: ansible_default_ipv4.address == "192.168.58.61"      #when指令中的变量名不需要手动加上 {{}}
或 
     when: inventory_hostname == "<主机名>"
	
ansible-playbook test4.yaml

在这里插入图片描述
在这里插入图片描述

6.迭代

Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环

vim test5.yaml
---
- name: play1
  hosts: dbservers
  gather_facts: false
  tasks: 
    - name: create file
      file:
        path: "{{item}}"
        state: touch
      with_items: [ /opt/a, /opt/b, /opt/c, /opt/d ]


- name: play2
  hosts: dbservers
  gather_facts: false		
  vars:
    test:
    - /tmp/test1
    - /tmp/test2
    - /tmp/test3
    - /tmp/test4
  tasks: 
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
      with_items: "{{test}}"
		
- name: play3
  hosts: dbservers
  gather_facts: false
  tasks:
    - name: add users
      user: name={{item.name}} state=present groups={{item.groups}}
      with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root
或
      with_items:
        - {name: 'test1', groups: 'wheel'}
        - {name: 'test2', groups: 'root'}

ansible-playbook test5.yaml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.Templates 模块

Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记

1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts       
[webservers]
192.168.58.61 http_port=192.168.58.61:80 server_name=www.accp.com:80 root_dir=/etc/httpd/htdocs

[dbservers]
192.168.58.62 http_port=192.168.58.62:80 server_name=www.benet.com:80 root_dir=/etc/httpd/htdocs

3.编写 playbook 
vim apache.yaml
---
- hosts: all
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: install configure file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf     #使用template模板
      notify:
        - restart httpd
    - name: create root dir
	  file: path=/etc/httpd/htdocs state=directory
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted

ansible-playbook apache.yaml
8.tags 模块

可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用–tags选项能实现仅运行指定的tasks
playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时,无论执行哪一个tags时,定义有always的tags都会执行

vim webhosts.yaml
---
- hosts: webservers
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - only     #可自定义
    - name: touch file
      file: path=/opt/testhost state=touch
	  tags:
	  - always    #表示始终要运行的代码

ansible-playbook webhosts.yaml --tags="only"

vim dbhosts.yaml
---
- hosts: dbservers
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - only
    - name: touch file
      file: path=/opt/testhost state=touch


ansible-playbook dbhosts.yaml --tags="only"
###分别去两台被管理主机上去查看文件创建情况

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

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

相关文章

金现代LIMS在电子行业的应用

近期&#xff0c;随着国家政策对可靠性检验标准的进一步提升&#xff0c;电子、机械等相关行业对LIMS实验室管理系统的需求愈发迫切。 政策速递&#xff08;一&#xff09; 提升制造业质量与可靠性管理水平 01 2023年6月&#xff0c;工业和信息化部、教育部、科技部、财政部、…

一文带你全面掌握Git技能知识!

简单地说&#xff0c;Git 究竟是怎样的一个系统呢&#xff1f;请注意接下来的内容非常重要&#xff0c;若你理解了 Git 的思想和基本工作原理&#xff0c;用起来就会知其所以然&#xff0c;游刃有余。在学习 Git 时&#xff0c;请尽量理清你对其它版本管理系统已有的认识&#…

Elasticsearch Java客户端和Spring data elasticsearch

文章目录 官网版本组件版本说明实现代码地址es Spring Data Repositories例子&#xff1a;ElasticsearchRepository分析 es Spring Data Repositories 关键字es Spring Data Repositories client 加载rest风格客户端直接执行dsl例子响应式客户端-ReactiveElasticsearchClientpo…

SSD市场上演大洗牌,61TB豪华「别墅」横空出世

最近几年 SSD 售价是肉眼可见的下降&#xff0c;相信大伙儿没少跟着喝汤吃肉吧。 有人将这些变化归结于全球市场过饱和&#xff0c;需求下滑。 也有人认为国产 NAND 闪存崛起是压垮 SSD 高昂售价的最后一根稻草。 在小忆看来&#xff0c;不论是需求矛盾还是国产崛起不过是其中…

Maven右侧依赖Dependencies消失

项目右侧的Maven依赖Dependencies突然消失&#xff0c;项目中的注解都出现报错&#xff0c;出现这种情况应该是因为IDEA版本早于maven版本&#xff0c;重新检查项目中的Maven路径&#xff0c;选择File->Settings->搜索Maven&#xff0c;检查Maven home directory&#xf…

爆肝整理,接口自动化测试-数据驱动框架封装(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口自动化框架—…

没有软件测试经验,怎样面试测试工作?

纸上得来终觉浅&#xff0c;所有的面试经验都是要自己去体验&#xff0c;他人说来的都是他人的经验。 同样&#xff0c;每个公司&#xff0c;面对的面试官都会有不同的问题&#xff0c;当然这些问题可能会大同小异&#xff0c;但是也需要自己总结得出&#xff0c;这样的经验不…

1221. 四平方和(超详细!!)

输入样例&#xff1a; 5输出样例&#xff1a; 0 0 1 2 本题思路&#xff1a;以空间换时间 由于暴力解法我们至少要枚举三个数&#xff0c;然后计算出第四个数 呢么需要进行三重循环,时间复杂度大概为O(n3),则会超时 所以我们要进行优化来降低时间复杂度 我们的思路是&#xf…

怎么学习C语言,才能快速掌握?

有多年软件行业经验&#xff0c;期间参与过多个C语言项目。要掌握一门编程语言&#xff0c;仅仅投入时间学习是不够的&#xff0c;关键在于实际项目经验。在没有真正实战经验之前&#xff0c;不宜轻易声称掌握某种编程语言&#xff0c;因为编程是积累性的工作&#xff0c;理论知…

需求太多处理不过来?MoSCoW模型帮你

一、MoSCoW模型是什么 MoSCoW模型 是在项目管理、软件开发中使用的一种排序优先级的方法&#xff0c;以便开发人员、产品经理、客户对每个需求交付的重要性达成共识。 MoSCoW是一个首字母缩略词&#xff0c;代表&#xff1a; M&#xff08;Must have&#xff09;&#xff1a…

IDEA开启并配置services窗口

前言&#xff1a; 一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时&#xff0c;如果要调试测需要依次启动各个项目比较麻烦。 方法一&#xff1a; 默认第一次打开项目的时候&#xff0c;idea会提示是否增加这个选项卡&#xff0c;如果你没…

NIDEC COMPONENTS尼得科科宝滑动型DIP开关各系列介绍

今天AMEYA360对尼得科科宝电子滑动型DIP开关各系列参数进行详细介绍&#xff0c;方便大家选择适合自己的型号。 系列一、滑动型DIP开关 CVS 针脚数&#xff1a;1, 2, 3, 4, 8 安装类型&#xff1a;表面贴装&#xff0c;通孔 可水洗&#xff1a;无 端子类型&#xff1a;PC引脚(只…

Closure Table-树形多级关系数据库设计(MySql)

一般树形多级关系数据库设计&#xff0c;比较普遍的就是四种方法&#xff1a;&#xff08;具体见 SQL Anti-patterns这本书&#xff09; Adjacency List&#xff1a;每一条记录存parent_id Path Enumerations&#xff1a;每一条记录存整个tree path经过的node枚举&#xff08…

Java互斥锁简单实例

Java互斥锁简单实例 本文实例讲述了java互斥锁。分享给大家供大家参考。具体分析如下&#xff1a; 互斥锁&#xff0c;常常用于多个线程访问独占式资源&#xff0c;比如多个线程同时写一个文件&#xff0c;虽然互斥访问方式不够高效&#xff0c;但是对于一些应用场景却很有意义…

STM32 LoRa(学习二)

LoRa关键参数说明 LoRa数据包由三个部分组成&#xff1a;前导码、可选报头、数据有效负载。 前导码&#xff1a;用于保持接收机与输入的数据流同步。默认情况下&#xff0c;数据包含有12个符号长度的前导码。前导码是一个可以通过编程来设置的变量&#xff0c;所以前导码的长度…

我总结的接地概念,为什么水泥大地是导体,为什么要接地,TT和TN供电系统等

我总结的接地概念&#xff0c;为什么水泥大地是导体&#xff0c;为什么要接地&#xff0c;TT和TN供电系统等 wxleasyland 个人参考网上资料理解的相关接地的问题&#xff0c;可能会有不对的地方&#xff0c;仅供参考。 主要参考了大神的&#xff1a;《浅谈接地》https://zhuan…

软件测试员怎么提升自己的职业竞争力?

目录 管理方向 技术方向 初级测试人员 中级测试人员 高级测试人员 首先分析下软件测试岗位的发展方向&#xff1a;软件测试岗位可以向两个方向发展&#xff0c;一个管理方向&#xff0c;一个技术方向。现在很多做测试的人感到很迷茫&#xff0c;自己整天做着重复的事情&am…

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按&#xff1a;传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点&#xff0c;而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么&#xff1f;它的方案的设计思路是什么&#xff1f;今天&#xff0c;浪潮信息驱动工程师刘伟带…

从零开始学python(十三)爬虫工程师自动化和抓包

前言 回顾之前讲述了python语法编程 必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析&#xff0c;爬虫数…

三十三章 uboot使用(universal boot loader)

Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设&#xff0c;然后将Linux内核从flash(NAND&#xff0c;NORFLASH&#xff0c;SD&#xff0c; MMC 等)拷贝到 DDR 中&#xff0…