ansibe的脚本---playbook剧本(1)

playbook剧本组成部分:

1、task 任务: 主要是包含要在目标主机上的操作,使用模块定义操作。每个任务都是模块的调用。
2、variables变量:存储和传递数据。变量可自定义,可以在playbook中定义为全局变量,可以外部传参。
3、Templates模板: 用于生成配胃文件。模版是包含占位符的文件。占位符有ansilbe在执行时转化为变量值。
4、handlers 处理器: 当需要变更时,可以执行触发器。
5、Roles 角色:是一种组织和封装playbook的,允许把相关的任务,变量,模板和处理器组成一个可复用的单元。

文件格式        xxx.yml 或 xxx.yaml

检查yml文件的语法是否正确

ansible-playbook xxx.yaml --syntax-check
eg:
ansible-playbook test.yaml --syntax-check

检测任务定义任务

ansible-playbook xxx.yaml --list-task

eg:
ansible-playbook test.yaml --list-task

检查生效的目标主机

anible-playbook xxx.yaml --list-hosts
eg:
ansible-playbook test.yaml --list-hosts

执行过程在设置密码

ansible-playbook test.yaml -K

需要开启免密

声明用户执行任务

ansible-playbook test.yaml  -u root -k

安装httpd脚本

vim test.yaml

#one playbook
- name: first play
#一个name就是一个任务名,可以不写
#one playbook
- name: first play
#一个name就是一个任务名,可以不写
  gather_facts: false
#是否收集目标主机的系统信息:false不收集
  hosts: 192.168.10.202
#执行的目标主机
  remote_user: dn
  become: yes
#切换用户
  become_user: root
#在目标主机执行的用户
  tasks:
   - name: ping test
#one playbook
- name: first play
#一个name就是一个任务名,可以不写
  gather_facts: false
#是否收集目标主机的系统信息:false不收集
  hosts: 192.168.10.202
#执行的目标主机
  remote_user: dn
  become: yes
#切换用户
  become_user: root
#在目标主机执行的用户
  tasks:
   - name: ping test
     ping:
     #测试与目的主机的连通性
   - name: close selinux
     command: '/sbin/setenforce 0'
     ignore_errors: True
     #关闭linux的机制,如果报错,忽略不计
   - name: close firewalld
     service: name=firewalld state=stopped
     #关闭防火墙
   - name: install httpd
     yum: name=httpd
     #安装httpd服务
   - name: start httpd
     service: enabled=true name=httpd state=started
     #设置服务开机自启
   - name: edition index.html
     shell: echo "this is httpd" > /var/www/html/index.html
     #修改访问页面
     notify: restart httpd
#notify要和handers的name一样
  handlers:
   - name: restart httpd
     service: name=httpd state=restarted

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

创建user和group

- hosts: 192.168.10.201
  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']}}"
       dest: /opt/ky32.txt
#获取目标的ip地址,然后复制到目标文件
ansible-playbook test1.yaml -e 'username=lyw groupname=lyw'

循环---when

- hosts: all
#可以使用主机的IP地址,也可以是用户组名,也可以是all
  remote_user: root
  tasks:
   - name: test when
     debug:
       msg: '位置判断:'
#debug~echo msg:输出的内容,用于脚本的调试,在正式脚本中可以去除。
#一个name
     #when: ansible_default_ipv4.address == '192.168.10.201'
     when: inventory_hostname != '192.168.10.201'

例2

用when---201 安装nginx、202 安装httpd

- hosts: all
  remote_user: root
  tasks:
   - name: nginx when
     yum: name=nginx
     when: ansible_default_ipv4.address == '192.168.10.201'
   - name: nginx info
     debug:
       msg: "安装nginx"
     when: ansible_default_ipv4.address == '192.168.10.201'
   - name: httpd when
     yum: name=httpd
     when: ansible_default_ipv4.address == '192.168.10.202'
   - name: httpd info
     debug:
       msg: "安装httpd"
     when: ansible_default_ipv4.address == '192.168.10.202'

循环---list

- hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - debug:
       msg: "{{ item }}"
     with_list:
      - [a,b,c,d]
      - [1,2,3,4]
#分组打印

例2

创建文件

- hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - name:
     file:
       path: "{{ item }}"
       state: touch
     with_list:
      - /opt/a
      - /opt/b
      - /opt/c
      - /opt/d
      - /opt/1
      - /opt/2
      - /opt/3
      - /opt/4
#分组打印

循环---items

- hosts: 192.168.10.201
  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还是把两个列表当成整体进行遍历

例2

创建文件

- hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - name:
     file:
       path: "{{ item }}"
       state: touch
     with_items:
      - [/opt/a,/opt/b,/opt/c,/opt/d]
      - [/opt/1,/opt/2,/opt/3,/opt/4]

循环---together

- hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - name:
     file:
       path: "{{ item }}"
       state: touch
     with_together:
      - [a,b,c,d]
      - [1,2,3,4]
#组循环,列表当中的值一一对应,打印出来

循环---nested

#list和items 创建文件
- hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - name:
     file:
       path: "{{ item }}"
       state: touch
     with_nested:
      - [a,b,c,d]
      - [1,2,3,4]
#列表里面的元素定义了循环的次数,第二层列表,相当与内循环。

字典

- name: play1
  hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  tasks:
   - name: create file
     file:
       path: "{{ item }}"
       state: touch
     with_items: [/opt/123,/opt/456,/opt/789]

- name: play2
  hosts: 192.168.10.201
  remote_user: root
  gather_facts: false
  vars:
    test:
    - /opt/test1
    - /opt/test2
    - /opt/test3
  tasks:
   - name: dir
     file:
       path: "{{item}}"
       state: directory
     with_items: "{{ test }}"

用户名: testl test2 组名分别是 dn1 dn2

- name: play1
  hosts: 192.168.10.201
  gather_facts: false
  tasks:
   - name: create group
     group:
       name: "{{ item }}"
       state: present
     with_items:
       - 'dn1'
       - 'dn2'
   - name: create user
     user:
       name: "{{ item.name }}"
       state: present
       groups: "{{ item.groups }}"
     with_items:
       - {name: 'test1', groups: 'dn1'}
       - {name: 'test2', groups: 'dn2'}

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

- name: play2
  hosts: 192.168.10.80
  gather_facts: false
  tasks:
   - name: create tree sl nginx httpd vsftpd dhcp
     yum:
       name: "{{ item }}"
     with_list:
       - tree
       - sl
       - nginx
       - httpd
       - vsftpd
       - dhcp

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

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

相关文章

centos7服务器安装 mysql

centos7服务器安装 mysql 一、下载 官网:https://dev.mysql.com/downloads/mysql/ 二、安装 1.查看有没有需要卸载的SQL包,一般系统的mariadb是自带的,需要卸载 rpm -qa | grep mysql rpm -qa | grep mariadb例如:安装过MySQL…

ubuntu保存分辨率失效解决办法

在VM虚拟机中,遇到修改ubuntu分辨率后,重启后又重置的解决办法。 目前我的ubuntu版本是:ubuntu 18.04.6 版本。 1.首先,在你喜欢的目录建立一个.sh 脚本文件。 终端执行命令:sudo vim xrandr.sh 2.按 i 进入编辑状…

开放原子线下训练营---STM32H7搭载TobudOS开发心得

导语: 本次线下活动是以STM32H7为核心的一个功能强大的开发板,不仅支持Audio,HDMI,还支持4G或者WiFi模块,也可以外接屏幕,本次线下训练营是以4G模块进行开发。 线下的实物开发板如下所示: 注意…

更改WiseAlign软件界面图标方法

更改WiseAlign软件界面图标方法 未替换时 首先将图片转换为BMP格式,在搜索栏处输入画图,点击打开画图工具 按住图标拖动到画布内,或是直接CtrlV将图标复制到画布内 点击文件,再点击另存为 保存类型选择“24位位图(*.bm…

超分辨数据集:Set5 Set14 BSD100 Urban100 Manga109

DIV2K数据集官网上很好找到,但是网上流传的Set5 14 BSD100,Urban100 Manga109都是私人进行处理过的版本,各个处理方式都不同,为了统一方式写了这篇文章。 官方的DIV2K x2、x3、x4的LR图片使用下面matlab代码生成(已经经过测试最后…

Hadoop入门学习笔记——五、在虚拟机中部署Hive

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 五、在虚拟机中部署Hive5.1. 在node1虚拟机安装MySQL5.2.…

drawio绘制组织架构图和树形图

drawio绘制组织架构图和树形图 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能,并实现了云…

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

【Nacos】—客户端与服务端源码解析

Nacos系列 Nacos—简述、注册中心、配置中心 Nacos安装教程 SpringBoot项目与Nacos配置 一、背景介绍 Nacos(Naming and Configuration Service)是阿里巴巴开源的服务发现和配置管理工具,它是一个全面的微服务基础设施组件,提供…

Linux命令-查看内存、GC情况及jmap 用法

查看进程占用内存、CPU使用情况 1、查看进程 #jps 查看所有java进程 #top 查看cpu占用高进程 输入m :根据内存排序 topMem: 16333644k total, 9472968k used, 6860676k free, 165616k buffers Swap: 0k total, 0k used, 0k free, 6…

【vue】前端页面点击按钮弹窗播放m3u8格式视频

最终效果&#xff1a; 1.表格操作列 <el-table ref"tables" v-loading"loading" :data"list" :default-sort"defaultSort" sort-change"handleSortChange" border><el-table-column label"id" align&qu…

【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。

在不同编程语言中&#xff0c;控制成员&#xff08;变量、方法、类等&#xff09;可见性的机制不尽相同。以下是对比JavaScript、Go、Ada、Python、C、Java、PHP所使用的访问限制关键字和约定&#xff1a; 一、JavaScript ### JavaScript访问限制 早期的JavaScript并没有类似…

vue 使用 html2canvas 截取图片保存

vue 使用 html2canvas 截取图片保存 好久没有写博文了&#xff0c;写够了&#xff0c;没啥想写的了&#xff0c;这个号算是废了&#xff0c;哎&#xff0c;气人啊&#xff01;越来越胖&#xff0c;越来越懒了。 html2canvas 简介 html2canvas是一个JavaScript库&#xff0c;它…

自定义类型:结构体,枚举,联合(2)

2. 位段 2.1 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 2.位段的成员名后边有一个冒号和一个数字。 比如&#xff1a; struct A {int _a:2;int _b:5;int _c:10;int _d:30; };A就是一…

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具&#xff0c;可以帮助我们熟悉Scala语言。即使你对Scala不熟悉&#xff0c;仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互&#xff0c;提交查询&#xff0c;这便于调试&#xff0c;也便于初学者使用…

Apache Flink 进阶教程(七):网络流控及反压剖析

目录 前言 网络流控的概念与背景 为什么需要网络流控 网络流控的实现&#xff1a;静态限速 网络流控的实现&#xff1a;动态反馈/自动反压 案例一&#xff1a;Storm 反压实现 案例二&#xff1a;Spark Streaming 反压实现 疑问&#xff1a;为什么 Flink&#xff08;bef…

15-Echarts简化系列之:geo 地理坐标系,地图资源基本绘制和配置项使用

Echarts版本&#xff1a;5.4.3 geo&#xff1a;地理坐标系组件用于地图的绘制&#xff0c;支持在地理坐标系上绘制散点图&#xff0c;线集。绘制地图的数据源可支持 geojson和 svg 格式。 本文章中提供 实例代码 和地图 静态资源 &#xff0c;项目以 react ts 为主&#xff0…

html旋转相册

一、实验题目 做一个旋转的3d相册&#xff0c;当鼠标停留在相册时&#xff0c;相册向四面散开 二、实验代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" con…

大一C语言查缺补漏 12.23

遗留下来的问题&#xff1a; 3-1 6 3-2 2 3-2 5 在C语言中&#xff0c;标识符的第一个字符是有什么规范吗&#xff1f; 在C语言中&#xff0c;标识符的第一个字符必须是以下两种情况之一&#xff1a; 字母&#xff08;a~z或A~Z&#xff09; 下划线 (_) 在C语言中&…

FFmpeg——视频处理工具安装以及简单命令学习。

FFmpeg 是一个免费、开源且高度可定制的多媒体处理工具&#xff0c;它是一个强大的跨平台框架&#xff0c;用于处理音频、视频、多媒体流和图像。FFmpeg 的主要功能包括解码、编码、转码、流处理、多路复用、分离、合并、过滤等&#xff0c;支持多种音视频格式&#xff0c;包括…