反星系

连接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的更多相关文章

  1. ansible编译httpd playbook示例

    以下是playbook的内容.它的处理流程是: 1.先在本地下载apr,apr-util,httpd共3个.tar.gz文件. 2.解压这3个文件. 3.安装pcre和pcre-devel依赖包. 4 ...

  2. ansible核心模块playbook介绍

    ansible的playbook采用yaml语法,它简单地实现了json格式的事件描述.yaml之于json就像markdown之于html一样,极度简化了json的书写.在学习ansible pla ...

  3. ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...

  4. ansible初识二

    一.ansible模块(yum.pip.service.conr.user.group) 上篇中我们已经学了ansible 的几个模块, 接下来再来学习几个, 那么你是否知道ansible 一共有多少 ...

  5. mage Ansible学习2 Playbook

    一.上集回顾 1.运维: 手动 --> 标准化 --> 工具化 --> 自动化 --> 智能化 2.工具化 OS Install:PXE ,Cobbler:Virutaliza ...

  6. Linux中级之ansible配置(playbook)

    一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...

  7. Ansible系列(二):选项和常用模块

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  8. ansible之二:模块用法

    一:ansible远程执行命令 [root@ansible ~]# ansible test -m shell -a "date" >> 2016年 08月 02日 星 ...

  9. ansible入门二(Ansible常见模块介绍)

    本节内容: ansible命令基础 常见模块举例 一.ansible命令基础 语法: ansible <host-pattern> [-f forks] [-m module_name] ...

  10. ansible剧本之playbook操作

    ansible 剧本 yaml介绍: 是一个编程语言 文件后缀名 yaml yml 数据对应格式: 字典: key: value 列表: [] - ansible-playbook命令格式 执行顺序: ...

随机推荐

  1. Java深度历险(三)——Java线程​:基本概念、可见性与同步

    开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于J ...

  2. golang之gRPC

    相关链接: grpc: https://grpc.io/docs/languages/go/quickstart/ protobuf: https://protobuf.dev/programming ...

  3. Codeforces Round 832 (Div2)

    Swap Game Alice 和 Bob 两个人在玩游戏. 有一个长度为 \(n\) 的序列 \(a\),Alice 和 Bob 两人轮流完成一个操作,Alice 先开始. 每个人可以将数列的第一个 ...

  4. 优化简历的开源工具「GitHub 热点速览」

    有读者留言问我是不是"跑路"了,上周没发「GitHub 热点速览」是因为在忙于编写<HelloGitHub 月刊>.这不,我带着诚意满满的开源项目又回来啦!首先要分享一 ...

  5. web移动端触屏事件

    1.移动端与pc端的区别 (1)移动端没有鼠标,自然也没有鼠标事件.所以onmousedown之类的事件监听在移动端时无效的. (2)移动端为了响应双击事件,onclick事件有300ms的延迟,接下 ...

  6. Qt 子窗口 隐藏标题栏的图标,在任务栏上的不显示

    Qt子窗口使用Qt::Dialog样式时,隐藏窗口标题栏图标方法: this->setWindowIcon(QIcon()); Qt子窗口,在任务栏上的不显示,最简单的方法是设置Qt::Tool ...

  7. 从底层源码深入分析Bean的实例化

    生命周期的整体流程 Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁. ...

  8. 【前端】display:inline-block中间的间隙

    父元素宽度800px 两个并列子元素宽度设为50%,并且使用了display:inline-block 结果一运行,两个元素不在同一行? 我查审元素,两个子元素div的宽度都是400,也没有边框,边距 ...

  9. Go设置GOPROXY国内加速

    go env -w GOFLAGS=-buildvcs=false 在 Linux 或 macOS 上面 需要运行下面命令(或者,可以把以下命令写到 .bashrc 或 .bash_profile 文 ...

  10. getway网关跨域问题记录

    一.问题产生环境 1.1 为什么会产生跨域问题? 跨域不一定都会有跨域题. 因为跨域问题是浏览器对于ajax请求的一种安全限制: 一个页面发起的 ajax请求,只能是与当前页域名相同的路径,这能有效的 ...