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 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 state=latest
   - 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
     
wq

检查语法是否正确

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

错误演示如上图

正确演示如上图

playbook常用脚本命令

ansible-playbook test1.yml --list-task
一般运行会有几个task

ansible-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: 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 state=latest
   - 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

指定声明用户

ansible-playbook test1.yml -u root -k

传参变量

#this is second playbook
声明和引用变量,以及外部传参变量
- hosts: 20.0.0.30
  remote_user: root
  vars:
    groupname: zzz
    username: hj
  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']}}"
        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地址,也可以是用组名,也可以用all
  remote_user: root
  tasks:
   - name: test when
     debug:
       msg: '位置判断'
     when: ansible_default_ipv4.address == '20.0.0.30

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

条件满足才会执行

扩展

在20.0.0.30上安装nginx

在20.0.0.50上安装httpd

- hosts: all
  remote_user: root
  tasks:
   - name: nginx
     yum: name=nginx
     when: ansible_default_ipv4.address == '20.0.0.30'
   - name: nginx info
     debug:
       msg: "安装nginx"
     when: ansible_default_ipv4.address == '20.0.0.30'
   - name: http
     yum: name=httpd
     when: inventory_hostname == '20.0.0.50'

playbook当中的循环

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

- hosts: 20.0.0.30
  remote_user: root
  gather_facts: false
  tasks:
   - 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: play1
  hosts: 20.0.0.50
  gather_facts: false
  tasks:
   - name: yum info
     yum: name={{ item }} state=latest
     with_items:
       - tree
       - sl
       - nginx
       - httpd
       - vsftpd
       - dhcp

远程在20.0.0.50上创建三个目录,在主机上创建123,456,789三个文件,通过playbook将三个文件分别复制到之前三个目录中

- name: play1
  hosts: 20.0.0.50
  gather_facts: false
  tasks:
   - name: create dir
     file:
       path: "{{ item }}"
       state:  directory
     with_list:
      - /opt/test1
      - /opt/test2
      - /opt/test3

- name: play2
  hosts: 20.0.0.50
  gather_facts: false
  tasks:
    - name: echo
      copy:
        src: "{{item.wj}}"
        dest: "{{item.test}}"
      with_items:
       - {wj: '/opt/123',test: '/opt/test1'}
       - {wj: '/opt/456',test: '/opt/test2'}
       - {wj: '/opt/789',test: '/opt/test3'}

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

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

相关文章

用C爬取人人文库并分析实现免积分下载资料

最近有个学妹学习遇到问题,想要的学习资料都在文库中,因为资料太多太杂,想要一篇篇找太难了,主要是太浪费精力了。因此,听说这个事情我能解决,立马找到我,给我一杯奶茶就把我收买了,…

4. 可用性

文章目录 4. 第4章 可用性4.1. 可用性一般场景4.2. 可用性策略故障检测(Detect Faults)故障恢复(Recover from Faults )故障预防(Prevent Faults) 4.3. 基于策略的可用性调查表4.4. 可用性模式4.5. 扩展阅读…

云渲染Blender怎么用 Blender云渲染设置教程

作为一个免费且开源的三维创作套件,Blender为独立艺术家和小规模的创意团队提供了一个功能丰富的平台,涵盖了从建模、雕刻到动力学模拟、动画和高级渲染的全套工作流程。随着其支持的特效和视觉质量的不断提升,Blender项目的渲染耗时也显著增…

智能变电站集中监控辅助决策系统解决方案

项目背景 智能变电站是坚强智能电网的重要基础和支撑。它不仅是电网运行数据的采集源头和命令执行单元,而且与其他环节的联系非常紧密,为统一坚强智能电网的安全和优质提供了关键支撑。为了更有效地管理和控制变电站的各种设备和子系统,如视…

防火墙安全策略

目录 一、防火墙种类 二、防火墙流量控制手段 1、包过滤技术(传统) 2、状态检测技术 (1)、状态检测机制 三、安全实验 1、拓扑 2、需求 3、配置思路 4、关键配置截图 5、验证 一、防火墙种类 对于防火墙来说就是针对哪…

嵌入式开发工程师

嵌入式开发 岗位需求 上岗必备 文章目录 嵌入式开发前言一、负责新产品的电路图、PCB、嵌入式程序、软硬件调试等工作二、负责对现有产品进行硬件优化、调试、维护、排故等工作三、 负责各种单片机,传感器,元器件选型以及BOM表整理四、 负责硬件产品研发和量产过程中项目设计…

某马头条——day01

项目相关 技术栈 课程大纲 跟着视频搭建环境即可 APP登录 需求分析 手动加盐加密 表中有一个字段是salt,盐值。 用户微服务搭建 在service模块下新建一个user模块 进行配置。 server:port: 51801 spring:application:name: leadnews-usercloud:nacos:discovery:…

亚洲诚信TrustAsia成功入选《第十四批上海市重点商标保护名录》

近日,为进一步加大注册商标专用权的保护力度,上海市知识产权局制定并发布了《第十四批上海市重点商标保护名录》,亚数信息科技(上海)有限公司(以下简称亚数)榜上有名,注册商标“亚洲…

Go语言与HTTP/2协议的实践探索

随着互联网技术的发展,HTTP/2协议逐渐成为主流。Go语言作为一种高效、简洁的编程语言,与HTTP/2协议的结合具有很大的潜力。本文将探讨Go语言与HTTP/2协议的实践探索。 一、HTTP/2协议的优势 HTTP/2协议相比HTTP/1.1协议,具有以下优势&#…

Flask解决接口跨域问题

1、什么是跨域CROS CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种浏览器安全策略,用于控制在一个网页应用中如何让一个域的Web页面能够请求另一个域的资源。在Web开发中,由于同源策略(Same-Ori…

HarmonyOS快速入门之开发准备

开发准备 本文档适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。 在开始之前,您需要了解有关HarmonyOS应用的…

docker安装ES:7.8和Kibana:7.8

本文适用于centos7,快速入手练习es语法 前置:安装docker教程docker、docker-component安装-CSDN博客 1.安装es 9200为启动端口,9300为集群端口 docker pull elasticsearch:7.8.0mkdir -p /mydata/elasticsearch/pluginsmkdir -p /mydata/elasticsear…

企业招股书API,轻松获取公司招股书信息

前言 随着互联网的普及和信息技术的不断发展,获取公司招股书信息变得越来越便捷。企业招股书API作为一种新型的技术手段,为投资者提供了更加高效、准确、全面的招股书信息。本文将介绍企业招股书API的功能和优势,帮助投资者轻松获取公司招股…

C++之深拷贝和浅拷贝

目录 浅拷贝 深拷贝 赋值运算符重载的深拷贝 在学习C类和对象时我们学习了浅拷贝,本期我们将再次回顾浅拷贝并为大家讲述深拷贝的概念。 浅拷贝 在学习类和对象时我们学习了拷贝构造函数的概念,而且我们也知道,因为拷贝构造函数属于类的默…

超好用的API协作管理工具:Apipost

在当今快速发展的数字化时代,API已成为企业与开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API开发、调试、测试、文档等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而…

B/S医院手术麻醉临床管理系统源码 手术申请、手术安排

手术麻醉系统概述 手术室是医院各个科室工作交叉汇集的一个重要中心,在时间、空间、设备、药物、材料、人员调配的科学管理、高效运作、安全质控、绩效考核,都十分重要。手术麻醉管理系统(Operation Anesthesia Management System&#xff0…

陶建辉在 CIAS 2023 谈“新能源汽车的数字化”

近年,中国的新能源汽车发展迅猛,在全球竞争中表现出色,已经连续 8 年保持全球销量第一。在新兴技术的推动下,新能源汽车的数字化转型也正在加速进行,从汽车制造到能源利用、人机交互,各个环节都在进行数字化…

数学建模学习笔记-皮尔逊相关系数

内容:皮尔逊相关系数 一.概念:是一个和线性线关的相关性系数 1.协方差概念: 协方差受到量纲的影响因此需要剔除 2.相关性的误区 根据这个结论,我们在计算该系数之前需要确定是否为线性函数 二.相关性的计算 1.Matlab&#xff…

智能硬件(6)之通用引脚(GPIO)

小编带领大家学习的四大开源硬件和智能模块,他们之间是如何通信的,主控芯片是如何控制智能模块,做某些事情呢?有没有小朋友发起疑问呢? 这里,涉及到了特别重要的知识点,就是通用引脚&#xff0c…

Elasticsearch 性能调优基础知识

Elastic Stack 已成为监控任何环境或应用程序的实际解决方案。 从日志、指标和正常运行时间到性能监控甚至安全,Elastic Stack 已成为满足几乎所有监控需求的一体化解决方案。 Elasticsearch 通过提供强大的分析引擎来处理任何类型的数据,成为这方面的基…