Ansible之二playbook
反星系
连接https://galaxy.ansible.com下载相应的roles
列出所有安装的 galaxy ansible-galaxy list
安装galaxy ansible-galaxy install geerlingguy.redis
删除galaxy ansible-galaxy remove geerlingguy.redis
反拉
推送命令至全程,效率无限提升,对运维要求较高
Ansible剧本
ansible-playbook hello.yml
cat hello.yml
#hello world yml文件
-hosts:websrvs
remote_usr:root
任务:
-name:hello world
命令:/ usr / bin / wall hello world
第一个playbook- hello.yml
---
- 主持人:全部
remote_user:root 任务:
- name: hello
command: hostname
执行hello.yml
ansible-playbook hello.yml
ansible系列命令
Ansible-vault
功能:管理加密解密yml文件
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create hello.yml 创建新文件
ansible-console:2.0新增。可交互执行命令,支持tab
root@test(2)[f:10]$
执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$
设置并发数:forks n 例如:forks 10
切换组:cd主机组 例如:cd web
列出当前组主机列表: list
列出所有的内置命令: ?或help
示例:root@all(2)[f2:5]$ list root@all(2)[f:5]$ cd appsrvs root@appsrvs(2)[f:5]$ list
root@appsrv(2)[f:5] yum name=httpd state=present root@appsrv(2)[f:5] service name=httpd state=started
playbook
playbook是由一个或多个“play” 组成的列表
play的主要功能在于将事先归并为一组主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让他们联合起来按事先编排的机制同唱一台大戏
playbook采用YAML语言编写
YAML介绍
YAML是一个iekeduxing高的用于表达资料序列的格式。YAML参考了其他多种语言,包括:XML,C语言,Python,Perl以及电子邮件合适RCF2822等。
List:列表,其所有元素均使用 “-” 打头
示例:
#美味水果清单
- 苹果
- 橙子
- 草莓
- 芒果
Dictionary:字典,通常由多个key与value构成
示例:
---
#员工记录
名称:员工Doveloper
职务:开发人员
技能:精英
也可以将key:value防止于{}中进行标识,用,分隔多个key:value
示例:
---
#员工记录
{name:Example,job:Developer.skill:Elite}
YAML语法:yaml语法和其他高洁语言类似,并且可以简单表达清单,散列表,标量等数据结构。其结构(Structure)通过空格来展示,序列(sequence)离得项用“-”来代表,Map里的键值对用“;”分隔。
Playbook核心元素
Hosts 执行的远程主机列表
Tasks 任务集
Varniable 内置变量或自定义变量在playbook中调用
Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
Handlers和notity结合使用,由特定条件出发的操作,满足条件方才执行,否则不执行
tags标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等特性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时如果确性其没有变化,就可以通过tags跳过些代码片段
ansible-playbook -t tagsname useradd.yml
playbook示例
1、创建newfile文件夹 2、建立test2系统用户 3、安装httpd 4、复制indes.html文件 5、开启httpd服务
ansible-playbook -C httpd.yml #先-C测试语法是否正确
---
- hosts: 192.168.0.31
remote_user: root tasks:
- name: create new file
file: name=/data/newfile state=touch
- name: create new user
user: name=test2 system=yes shell=/sbin/nologin
- name: install package
yum: name=httpd state=present
- name: copy html
copy: src=/var/www/html/index.html dest=/var/www/html/index.html
- name: start service
service: name=httpd state=started enabled=yes
playbook基础组件
如果命令或脚本的退出码不为零,可以使用如下方式替代
tasks:
- name:run this command and ignore the result
shell:/usr/bin/somecommand||/bin/true
或者使用ignore_errors来忽略错误信息:
tasks:
- name:run this command and ignore the result
shell:/usr/bin/comecommand
ignore_errors:True
运行playbook的方式
ansible-playbook<filename.yml>...[options]
常见选项
--check 或者-C 只检测可能会发生的改变,但不真正执行操作
--list-hosts 列出运行任务的主机 --list-tasks 列出playbook任务 --list-tags 列出任务标签
--limit 主机列表 只针对主机列表中的主机执行
-v显示过程 -vv -vvv更详细
示例
ansible-playbook file.yml --check 只检测
ansible-playbook file.yml
ansible-playbook file.yml --limit websrvs
handlers和notify结合使用出发条件
Handlers
是task列表,这些task与前述的task并没有本质上的不同用于关注的资源发生变化时,才会采取一定操作
Notify此action可用于在每个play的最后被处罚,这样可避免多次有改变发生时每次都执行指定操作,仅在所有的变化发生完成一次性的执行指定操作.在notify中列出的操作称为handle也即notify中调用handle中定义的操作
---
- hosts: 192.168.0.32
remote_user: root tasks:
- name: copy html
copy: src=file/index.html dest=/var/www/html/index.html
notify: copy failed
- name: start service
service: name=httpd state=started enabled=yes
handlers:
- name: copy failed
copy: src=file/index1.html dest=/var/www/html/index.html backup=yes
playbook中tags使用
示例:httpd.yml
---
- hosts: 192.168.0.32
remote_user: root
tasks:
- name: install
yum: name=httpd state=present
- name: install configure file
copy: src=file/index1.html dest=/var/www/html/index.html
tags:conf
- name: start httpd service
service: name=httpd state=started enabled=yes
tags: service
执行:ansible-playbook -t conf httpd.yml
playbook中变量使用
变量名:仅能由字母、数字、下划线组成,且只能以字母开头
变量来源:
1、ansible setup facts 远程主机的所有变量都可直接调用
2、在 /etc/ansible/hosts 中定义,优先级相对低【3】
普通变量:主机组中主机单独定义,优先级高于公共变量
公共(组)变量:针对主机组中所有主机定义统一变量
3、通过命令行指定变量,优先级最高,为【1】
ansible-playbook -e varname=value
4、在playbook中定义,优先级低于命令行,高于其他【2】
vars:
- var1:value1
- var2:value2
5、在role中定义
ansible all -m setup -a 'filter=ansible_*address*' #setup模块,过滤filter地址
---
- hosts: 192.168.0.32
remote_user: root tasks:
- name: install package1
yum: name={{ pkname1 }}
- name: install package2
yum: name={{ pkname2 }}
ansible-playbook -e 'pkname1=httpd pkname2=memcached' app.yml 或者
---
- hosts: 192.168.0.32
remote_user: root
vars:
- pkname1: httpd
- pkname2: vsftpd
tasks:
- name: install package1
yum: name={{ pkname1 }}
- name: install package2
yum: name={{ pkname2 }}
在 /etc/ansible/hosts 中定义变量
192.168.0.31 http_port=31
192.168.0.32 http_port=32
ansible-playbook hostname-yml
---
- hosts: all
remote_user: root tasks:
- name: set hostname
hostname: name=localhost{{ http_port }}
使用变量文件
定义变量 vars.yml
var1:httpd
var2:vsftpd
调用变量如下
---
- hosts: websrvs
remote_user: root
vars_files:
- vars.yml
tasks:
- name: install package
yum:name={{ var1 }}
- name: create file
file: name=/data/{{ var2 }}.log state=touch
模板templates
文本文件,嵌套有脚本(使用模板编程语言编写)
jinjia2语言,使用字面量,有下面形式
字符串:使用单引号或双引号
数字:证书,浮点数
列表:[ITEM1,ITEM2,...]
元组:(ITEM1,ITEM2,...)
字典:{KEY1:VALUE1,KEY2:VALUE2,...}
布尔型:true/false
算术运算:+,-,*,/,//,%,**
比较操作:==,!=,>=,<,<=
逻辑运算:and,or,not
流表达式:For If When
When
条件测试:如果需要根据变量、facts或此前任务的执行结果来作为某task执行与否的前世时,要用到条件测试,通过我很语句实现,在task中使用,jinja2的语法格式
when语句
在task后添加when子句即可使用条件测试;when语句支持jinja2表达式语法
示例:
-name:“shutdown RedHat flavored systems”
command:/sbin/shutdown -h now
when:ansible_os_family == "RedHat"
以下示例:centos7复制 nginx.cenf7模板;centos6复制 nginx.cenf6模板
---
- hosts: all
remote_user: root
vars:
- http_port:88
tasks:
- name: install package
yum name=nginx
- name cipy template for centos7
template: scr=nginx.cenf7.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version=="7"
notify: restart_service
- name cipy template for centos6
template: scr=nginx.cenf6.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version=="6"
notify: restart_service
- name: start service
service: name=nginx state=started enabled=yes handles:
- name: restart service
service: name=nginx state=restarted
Ansible之二playbook的更多相关文章
- ansible编译httpd playbook示例
以下是playbook的内容.它的处理流程是: 1.先在本地下载apr,apr-util,httpd共3个.tar.gz文件. 2.解压这3个文件. 3.安装pcre和pcre-devel依赖包. 4 ...
- ansible核心模块playbook介绍
ansible的playbook采用yaml语法,它简单地实现了json格式的事件描述.yaml之于json就像markdown之于html一样,极度简化了json的书写.在学习ansible pla ...
- ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...
- ansible初识二
一.ansible模块(yum.pip.service.conr.user.group) 上篇中我们已经学了ansible 的几个模块, 接下来再来学习几个, 那么你是否知道ansible 一共有多少 ...
- mage Ansible学习2 Playbook
一.上集回顾 1.运维: 手动 --> 标准化 --> 工具化 --> 自动化 --> 智能化 2.工具化 OS Install:PXE ,Cobbler:Virutaliza ...
- Linux中级之ansible配置(playbook)
一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...
- Ansible系列(二):选项和常用模块
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- ansible之二:模块用法
一:ansible远程执行命令 [root@ansible ~]# ansible test -m shell -a "date" >> 2016年 08月 02日 星 ...
- ansible入门二(Ansible常见模块介绍)
本节内容: ansible命令基础 常见模块举例 一.ansible命令基础 语法: ansible <host-pattern> [-f forks] [-m module_name] ...
- ansible剧本之playbook操作
ansible 剧本 yaml介绍: 是一个编程语言 文件后缀名 yaml yml 数据对应格式: 字典: key: value 列表: [] - ansible-playbook命令格式 执行顺序: ...
随机推荐
- Java并发显式锁和显式条件队列
一 显式锁 在类中利用synchronized修饰的方法或者this代码块,均使用的是类的实例锁或者类的锁.这些锁都称为内置锁. 可以利用显式锁进行协调对象的访问.即ReentrantLock.这是一 ...
- 基于python搭建FTP服务
使用python搭建FTP服务非常容易,且非常稳定,更重要的是可以实现一些精细化的控制,例如精细的访问权限配置,详细的日志记录等工作 这里是使用了pyftpdlib模块 1. 安装 pip insta ...
- Redis常见问题汇总
日常使用中Redis中配到的问题汇总 1. RedisDesktopManager提示:Connection error: QRedisClient compiled without ssh supp ...
- docker containner挂掉,无法exec进入bash,如何修改文件的终极解决方法
场景: Nginx在bash里面配置的时候挂掉了,然后docker start不起来,exec bash进不去,造成无法再改里面的文件了 解决方法: 1,docker ps –a 可以查到所有dock ...
- Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
一.使用说明 1.1 设备模拟-Com 第一步,填写要模拟的设备地址,0表示自动处理,也就是收到什么地址就应答什么地址. 第二步,填写对应的串口号和波特率. 第三步,单击打开串口,成功后会变成关闭串口 ...
- Windows10 64环境下用Qt5.12.12自带的mingw730_64构建编译OpenCV4.1.0时cmake-3.20.6中的参数配置
一.环境条件说明: 操作系统:Windows10 64环境 编译工具:用Qt5.12.12自带的mingw730_64构建 构建对象:编译OpenCV4.1.0的Release 64位和Debug 6 ...
- C#中工作线程处理完数据后将处理结果返回给UI主线程通知主线程操作界面
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- IM跨平台技术学习(九):全面解密新QQ桌面版的Electron内存优化实践
本文由QQ技术团队分享,本文收录时有内容修订和大量排版优化. 1.引言 QQ 作为国民级应用,从互联网兴起就一直陪伴着大家,是很多用户刚接触互联网就开始使用的应用. 而 QQ 桌面版最近一次技术架构升 ...
- 网络编程懒人入门(十四):到底什么是Socket?一文即懂!
本文由cxuan分享,原题"原来这才是 Socket",有修订. 1.引言 本系列文章前面那些主要讲解的是计算机网络的理论基础,但对于即时通讯IM这方面的应用层开发者来说,跟计算机 ...
- 阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计
本文引用自InfoQ社区"5亿用户如何高效沟通?钉钉首次对外揭秘即时消息服务DTIM"一文,作者陈万红等.策划褚杏娟,有修订和改动. 一.引言 本文是国内企业IM的事实王者钉钉首次 ...