Linux ansible 之 playbook
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的更多相关文章
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- Ansible之playbook的使用总结 - 运维笔记
之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...
- 自动化运维工具——ansible剧本playbook(三)
一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- ansible学习-playbook的YAML语法
[一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...
- Ansible基于playbook批量修改主机名实战
Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...
- 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群
首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...
- 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续
ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...
- Ansible 和 Playbook 暂存
Ansible 和 Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单 HOST Inventory 模块插件 Playbooks 查看ansible的目录结构 ...
随机推荐
- install chrome and chrome driver on ubuntu
sudo apt install python-minimal # python 2.7.xsudo apt install python-pip # https://www.ubuntuupdate ...
- Java Socket NIO
服务端: public class NIOServer { private static final String HOST = "localhost"; private stat ...
- PAT 乙级 1080 MOOC期终成绩 (25 分)
1080 MOOC期终成绩 (25 分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的 ...
- docker-容器,仓库
---恢复内容开始--- 前言: 学技术不能该断时间,连续的学习才是最好的学习方式. 00x1: 创建一个容器:docker create -it xxxx 而启动容器就有两种状态了,第一:新容器启动 ...
- Centos 6.4 安装Python 2.7 python-pip
1. 准备工作 下载源码包 wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 查看是否安装make工具 ~#rpm -qa|gr ...
- egret编译 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory解决
egret 白鹭编译时异常提示: FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory. 编译时内存溢出, 因为 ...
- Angular:在应用初始化时运行代码
想象一下,您的应用需要一些动态配置信息,这些信息在应用启动之前需要动态获取,并在应用运行中使用. 显然不能直接写道静态配置文件中,但是从客户端发出的请求又是一个异步请求,如何协调这个问题呢? 这里,我 ...
- runAllManagedModulesForAllRequests
https://weblog.west-wind.com/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-i ...
- String 相关
1. 输出结果为 true,"hello" + 1 在编译期间就被优化成了 "hello1",因此在运行期间,变量 a 和变量 b 指向的是同一个对象 Stri ...
- 入门Spring ioc
简单的来记录一下自己的SSM框架入门--------IOC篇段 ioc(控制反转 -将对象的创建的权利从类型本身来创建,来交给spring工厂来创建)的配置. <bean>:是可以指spr ...