playbook 剧本

yaml

  • 字典 key:value

  • 列表 [] -

  • 后缀名:yaml、yml

playbook 命令格式

Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
-C, --check # 检查但是不会真的执行
-f FORKS, --forks=FORKS # 并发,默认是5个
--list-hosts #列出匹配的主机
--syntax-check # 检查语法

第一个playbook

- hosts: web
remote_user: root
tasks:
 - name: copyfile
  copy: src=/etc/fstab dest=/tmp/fs

顺序执行,第一个任务所有机器都执行完,才会执行第二个任务

多任务

- hosts: web
remote_user: root
tasks:
 - name: copyfile
  copy: src=/etc/fstab dest=/tmp/fs
 - name: createuser
  user: name=alex11

幂等性 ,不管执行多少次,等到的结果永远是一样的

传参

第一种方式

- hosts: web
tasks:
 - name: create{{user}}
  user: name={{user}}
ansible-playbook -e user=alex13 p3.yml

第二种方式

10.0.0.[132:133] user=alex14
10.0.0.135  user=alex12
ansible-playbook p3.yml

第三种方式

[web:vars]
user=alex15
ansible-playbook p3.yml

第四种方式

- hosts: web
vars:
 - user: alex16
tasks:
 - name: create{{user}}
  user: name={{user}}

第五种传参方式

- hosts: web
tasks:
 - name: yumbc
  yum: name=bc
 - name: sum
  shell: echo 8+9|bc
  register: user
 - name: echo
  shell: echo {{user.stdout}} >/tmp/sum.txt
 - name: createuser{{user.stdout}}
  user: name=alex{{user.stdout}}

优先级

-e > playbook的vars > hosts文件

setup

ansible_all_ipv4_addresses # 所有的ipv4地址
ansible_all_ipv6_addresses # 所有的ipv6的地址
ansible_bios_version # 主板bios的版本
ansible_architecture # 架构信息
ansible_date_time # 系统的时间
ansible_default_ipv4 # IPv4默认地址
address #ip地址
alias #网卡名称
broadcast #广播地址
gateway # 网关
macaddress #mac地址
netmask #子网掩码
network #网段
ansible_distribution #系统的版本
ansible_distribution_file_variety# 系统的基于对象
ansible_distribution_major_version# 系统的主版本
ansible_distribution_version #系统的版本
ansible_domain #系统的域
ansible_dns #系统的dns
ansible_env #系统的环境变量
ansible_hostname #系统的主机名
ansible_fqdn #系统的完整主机名
ansible_machine #系统的架构
ansible_memory_mb #系统的内存信息
ansible_os_family #系统的家族
ansible_pkg_mgr #系统的包管理工具
ansible_processor_cores #cpu的核数
ansible_processor_count #每颗cpu上的颗数
ansible_processor_vcpus #cpu的总核数=cpu的颗数*每颗cpu上的核数
ansible_python #系统的python版本
ansible 10.0.0.132 -m setup -a "filter=*processor*" 搜索

正则

. 匹配任何字符,出了换行

* 任何次

+ 最少一次

? 最多一次

{m} 指定的m次

{m,n} m次到n次

{m,} 最少m次

{0,n} 最多n次

[0-9] 代表数字

^ 开头

$ 结尾

^ 取反

[^0-9]

() 分组

grep "^\(.*\):.*\1$" /etc/passwd
grep -E "^(.*):.*\1$" /etc/passwd

tags

- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  copy: dest=/etc/redis.conf src=/etc/redis.conf
  tags: copyfile
 - name: start
   service: name=redis state=started
ansible-playbook -t copyfile p7.yml

handlers

- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  copy: dest=/etc/redis.conf src=/etc/redis.conf
  tags: copy
  notify: restart
 - name: start
   service: name=redis state=started
handlers:
 - name: restart
   service: name=redis state=restarted

template

- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  template: dest=/etc/redis.conf src=/etc/redis.conf
  tags: copy
  notify: restart
 - name: start
   service: name=redis state=started
handlers:
 - name: restart
   service: name=redis state=restarted
- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  template: dest=/etc/redis.conf src=redis.conf
  tags: copy
  notify: restart
 - name: start
   service: name=redis state=started
handlers:
 - name: restart
   service: name=redis state=restarted
需要在本地的目录下创建一个templates目录,就可以用相对路径

u 撤销

p 粘贴

#yy 复制#行

d$ 从当前位置删除

o 当前位置下面增加空白行,并切换到编辑模式

r 替换

when

- hosts: web
tasks:
 - name: file
  copy: content="大弦嘈嘈如急雨" dest=/opt/file
  when: ansible_distribution_major_version=="7"
 - name: file
  copy: content="小弦切切如私语" dest=/opt/file
  when: ansible_distribution_major_version=="6"
- hosts: web
tasks:
 - name: file
  copy: content="大弦嘈嘈如急雨\n" dest=/opt/file
  when: sum=="7"
 - name: file
  copy: content="小弦切切如私语\n" dest=/opt/file
  when: sum=="6"
ansible-playbook -e sum=7 p11.yml

循环

- hosts: web
tasks:
 - name: file
  user: name={{item}}
  with_items:
   - alex20
   - alex21
- hosts: web
tasks:
 - name: creategroup
  group: name={{item}}
  with_items:
   - wusir20
   - wusir21
 - name: file
  user: name={{item}}
  with_items:
   - alex22
   - alex23

嵌套循环

- hosts: web
tasks:
 - name: creategroup
  group: name={{item}}
  with_items:
   - wusir22
   - wusir23
 - name: file
  user: name={{item.name}} group={{item.group}}
  with_items:
   - {"name":alex24,"group":wusir22}
   - {"name":alex25,"group":wusir23}

Ad-hoc 直接在命令行执行

Linux ansible 之 playbook的更多相关文章

  1. Ansible进阶--playbook的使用

    一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...

  2. Ansible之playbook的使用总结 - 运维笔记

    之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...

  3. 自动化运维工具——ansible剧本playbook(三)

    一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...

  4. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

  5. ansible学习-playbook的YAML语法

    [一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...

  6. Ansible基于playbook批量修改主机名实战

    Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...

  7. 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群

    首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...

  8. 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续

    ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...

  9. Ansible 和 Playbook 暂存

    Ansible  和  Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单  HOST Inventory 模块插件  Playbooks 查看ansible的目录结构 ...

随机推荐

  1. 工控随笔_08_西门子_Win10安装Step7.V5.6中文版授权管理器不能正常启动

    随着Windows系统的不断升级,西门子工控软件也不断升级,但是有时候在安装西门子 软件的时候会出现授权管理器不能正常启动的情况. 图  Step7 因为自动许可证管理器不能正常打开 如上图所示,报S ...

  2. Azkaban 使用问题及解决(一)

    什么是Azkaban Azkaban是一款基于Java编写的任务调度系统 任务调度:有四个任务脚A.B.C.D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C ...

  3. [ZZ]MTSC 2017 Mobile Testing@Google 演讲的感受

    原文地址: https://testerhome.com/topics/9364 Mobile Testing@Google 其实在开始听谷歌的张南和潘岩开始演讲前,了解下 Google Test C ...

  4. 前端-JavaScript1-8——JavaScript之作业练习

    1.表示气温有两种方法:摄氏度和华氏度.两者的关系是: 编写程序,让用户输入摄氏度,弹出对应的华氏温度. //第一步,让用户输入数字 var sheshidu = parseFloat(prompt( ...

  5. 从创业者角度看《印度合伙人 Padman》后的一点感受

    最近对印度电影颇有兴趣,周末在家看了<印度合伙人 Padman>.本文试着从一名创业者视角,谈谈个人的一点看法. 0.故事简介 引用自 https://movie.douban.com/s ...

  6. GSM与GPRS的区别

    1.    GSM是全球移动通讯系统(Global System for Mobile Communications)的简称 2.    GPRS是通用分组无线业务(General Packet Ra ...

  7. Memcache,redis,rabbitMQ,SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. 用自己的话简要阐述struts2的执行流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器FilterDispatcher是Struts ...

  9. solr中Cache综述

    一.概述 Solr查询的核心类就是SolrIndexSearcher,每个core通常在同一时刻只由当前的SolrIndexSearcher供上层的handler使用(当切换SolrIndexSear ...

  10. Android 开发 将window变暗

    前言 在创建弹窗功能时,一般有需求将背景的window界面变暗.下面两组代码就实现了变暗与恢复的功能. 变暗 public void startDark(){ WindowManager.Layout ...