实现 Ansible 企业级用法 playbook| 学习笔记

简介: 快速学习实现 Ansible 企业级用法 playbook

开发者学堂课程【自动化运维工具 Ansible 实战实现 Ansible 企业级用法 playbook 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/577/detail/7977


实现 Ansible 企业级用法 playbook

内容简介

一、ansible 系列命令

二、playbook

三、YAML 介绍

四、YAML 语法简介

五、playbook 核心元素

六、playbook 基础组件

七、运行 playbook

八、playbook VS ShellScripts

九、示例


一、ansible 系列命令

1、ansible-galaxy(银河)

连接  https://galaxy.ansible.com网站来 下载相应的 roles(角色)

角色是相当于把很多 playbook 组合起来的综合的完整的复杂的组合文件夹。

在互联网上有很多人的把在生产中用的一些比较实用的常见的解决实际问题的一些好的角色都放在网站上可以从这直接下载。

列出所有已安装的 galaxy

ansible-galaxy list

安装 galaxy

ansible-galaxy install  geerlingguy . redis

删除 galaxy

ansible-galaxy remove  geerlingguy . redis


2、ansible-pull

推送命令至远程,效率无限提升,对运维要求较高

push 与 pull 两个单词你以后还会经常见到,这个相反的两个操作,pull 是把一些对应的命令从本机拉取到远程去。

将来用这个命令执行一些 ansible 指令的时候,效率据比传统的 ansible 命令效率要高很多不过应用较少,要求相对来讲比较高一些


3、Ansible-playbook

建议以 ylm 或 yaml 为后缀

ansible-playbook hello. yml

cat hello. yml

#hello world yml file

-hosts:websrvs

remote _ user:root

tasks:

-name:hello world

command:/usr/bin/wall hello world

示例:

[root@ansible ansible]#vim hello.yml

- hosts : websrvs

remote_user ; root

tasks:

-name: hello

command:hostname

"hello, yml"7L,93C written

[root@ ansible ansible ]#ansible= playbookhello .yml


4、Ansible-vault

功能:管理加密解密 yml 文件

ansible-valt[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 new. yml 创建新文件

 

5Arisible-console:2.0+新增,可交互执行命令,支持  tabroot@test(2)[f:10]$

执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]S

设置并发数:forks n 例如:forks 10

切换组:cd 主机组例如:cd web

列出当前组主机列表:list

列出所有的内置命令:?或 help

示例:

root@all(2)[f:5]Slist

root@all(2)[f:5] Scdappsrvs

root@appsrvs(2)[f:5] $ list

root@appsrvs(2)[f:5] $ yum name= httpdstate =present

root@appsrvs(2)[f:5]$ servicename = httpdstate =started


二、playbook

1、playbook 是由一个或多个“play”组成的列表

2、play  的主要功能在于将事先归并为一组的主机装扮成事先通过 ansible 中的task 定义好的角色。从根本上来讲,所谓 task 无非是调用 ansible 的一个 module。将多个 play 组织在一个 playbook 中,即可以让它们联同起来按事先编排的机制同唱一台大戏

3、Playbook 采用 YAML 语言编写

流程示意图: 一一一一一一一一一一一一一

image.png

 

playbook 工作流程可以在 playbook 里面写好多的 play(1234),用户去调用playbook,但最终使用 ansible 对应的命令来执行的,然后调用里面一个个 play,然后每个 play 里面有自己的任务,可能第一个play里面有三个任务,第二个 play 里有四个任务,第三个 play 里面有若干个任务。

而任务和任务之间有先后顺序,然后去模块,执行时要看主机清单针对哪一个主机清单里面的主机来执行 playbook 任务,执行的时候也得通过 ssh 连接到被管控的主机上所以这个流程与之前类似,无非是把复杂任务写成 playbook 格式而已,最终还是通过 ansible 的一个个模块执行的,效果是一样的。 


三、YAML 介绍

1、YAML 是一个可读性高的用来表达资料序列的格式。YAML 参考了其他多种语言,包括:XML C语言、Python、Perll 以及电子邮件格式 RFC2822等。

ClarkEvans 在2001年在首次发表了这种语言,另外 Ingy dÖt Net 与 Oren Ben-Kiki 也是这语言的共同设计者

 

2、YAMLAin'tMarkup Language,即 YAML 不是 XML。不过,在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)

 

3、特性:

YAML 的可读性好

YAML 和脚本语言的交互性好

YAML 使用实现语言的数据类型

YAML 有一个一致的信息模型

YAML 易于实现

YAML 可以基于流来处理

YAML 表达能力强,扩展性好


4更多的内容及规范参见 http://www.yaml.org


四、YAML  语法简介

1、在单一档案中,可用连续三个连字号(——)区分多个档案。另外,还有选择性的连续三个点号(…)用来表示档案结尾。

 

2次行开始正常写 Playbook 的内容,一般建议写明该 Playbook 的功能使用#号注释代码

 

3、缩进必须是统一的,不能空格和 tab 混用

 

4缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的。

 

5、YAML 文件内容和 Linux 系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写数感

 

6、k/v 的值可同行写也可换行写。同行使用:分隔

 

7、v 可是个字符串,也可是另一个列表

 

8、一个完整的代码块功能需最少元素需包括 name:task

 

9、一个 name 只能包括一个 task

 

10、YAML 文件扩展名通常为 yml 或 yaml

 

11、list:列表,其所有元素均使用“-”打头

示例:

#A list of tasty fruits

- Apple

- Orange

-  Strawberry

- Mango一一一一一

 

12、Dictionary :字典,通常由多个 key与 value 构成

示例:

---

#An employee record

name:Example Developer

job:Developer

skill:Elite

也可以将 key:value 放置于{}中进行表示,用,分隔多个 key:value。

示例:

An employee record

{name:Example Developer, jobDeveloper, skill:Elite}

 

13、VAML 的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。

其结构 (Structure) 通过空格来展示,序列 (Sequence) 里的项用”-“来代表,Map 里的键值对用”:“分隔

示例:

name:John Smith

age:41

gender:Malei

spouse

name:Jane Smith

age:37

gender;Female

children:

- nameJimmy Smith

age:17

gender:Male

-name: Jenny Smith

gender,Female


五、Playbook 核心元素

1、Hosts 执行的远程主机列表

2、Tasks 任务集

3、Varniables 内置变量或自定义变量在 playbook 中调用

4、Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件

5、Handlers 和 notity 结合使用,由特定条件触发的操作,满足条件方才执行,则不执行

6、tags 标签指定某条任务执行,用于选择运行 playbook 中的部分代码。

ansib 具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过 tags 跳过此些代码片断

ansible-playbook-t tagsname useradd. Yml


六、playbook 基础组件

1、Hosts:

playbook  中的每一个 play 的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。hosts 用于指定要执行指定任务的主机,须事先定义在主机清单中

可以是如下形式:

one.example.com

one.example.com : two.example.com

192. 168.1. 50

192. 168.1.*

Websrvs:dbsrvs 两个组的并集

Websrvs:&dbsrvs 两个组的交集

webservers :Iphoenix 在 websrvs 组,但不在 dbsrvs 组

示例:-hosts:websrvs:dbsrvs

 

2、remote _ user:可用于 Host 和 task 中。也可以通过指定其通过 sudo 的方式在远程主机上执行任务,其可用于 play 全局或某任务;此外,甚至可以在 sudo 时使用 sudo _ user 指定 sudo 时切换的角户

-hosts:websrvs

remote _ user:root

tasks:

name:test  connection

ping:

remote _ user:magedu

sudo;yes               默认sudo为root

sudo _ user: wang      sudo为wang

 

3、task 列表和 action

play 的主体部分是 task list。 task list 中的各任务按次序逐个在 hosts 中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

在运行自下而下某 playbook 时,如果中途发生错误,所有已执行任务都将回滚,因此,在更正 playbook 后重新执行一次即可

task 的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致

每个 task 都应该有其 name,用于 playbook 的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供 name,则 action 的结果将用于输出

 

4、tasks:任务列表


5、书写格式:

(1) action:module arguments

(2) module:arguments(目前实用得多建议使用

注意:shell 和 command 模块后面跟命令,而非 key=value

 

6、某任务的状态在运行后为 changed 时,可通过“notify”通知给相应的handlers


7、任务可以通过 "tags" 打标签,而后可在 ansible-playbook 命令上使用 -t 指定进行调用

示例:

tasks:

- name:disable selinux

command:/shin/ setenforce  0

 

8、如果命令或脚本的退出码不为零,可以使用如下方式替代

tasks:

- name:run this command and ignore the result

shell:/usr/bin/ somecommand |I/bin/true

 

9、或者使用 ignore _ errors 来忽略错误信息:

tasks:

- name:run this command and ignore the result

shell:/usr/bin/ somecommand  

ignore _ errors:True

 

七、运行playbook

1、运行 playbook 的方式

ansible-playbook<filename. yml>...[options]

 

2、常见选项:

--check 只检测可能会发生的改变,但不真正执行操作

--list-hosts 列出运行任务的主机

--limit 主机列表只针对主机列表中的主机执行

-v 显示过程  -vv -vvv 显示的更详细

 

3、示例:

ansible-playbook file. yml--check  只检测

ansible-playbook file. yml

ansible-playbook file. yml--limit websrvs


八、playbook VS ShellScripts

1、SHELL 脚本一一一一一一一一一一一一

#!/bin/bash

#安装 Apache

yum install−-quiet-yhtpd

#复制配置文件

cp/tmp/httpd.conf/etc/httpd/conf/httpd.conf cp/tmp/vhosts.conf/etc/http/d/conf:d/I

#启动 Apache,并设置开机启动

servicehttpdstart

 

2、Playbook 定义

-hosts:all

tasks:

-name:"安装 Apache"

yum:name=httpd

name: “复制配置文件”

copy:src=/tmp/httpd.confdest=/etc/httpd/conf/

copy:src=/tmp/vhosts.confdest=/etc/httpd/conf.cd/

-name:“启动 Apache,并设置开机启动"

service;name= httpdstate = startedenabled =yes


九、示例

1、示例:sysuser. yml

-hosts:all

remote _ user:root

tasks:

-name:create mysql user

user:name=mysql system=yes uid=36

-name:create a group

group:name= httpdsystem =yes

 

2、示例:

httpd.yml

- hosts:websrvs

remote user:root

tasks:

-name: Installhttpd

yum:name= httpdstate =present

-name:Install configure file

copy:src=files/httpd.confdest=/etc/httpd/conf/

-name;start service

service:name= httpdstate = startedenabled =yes

大体上配置服务,基本上是装包,拷贝基本文件,启动服务。

但此过程也会有一定的问题,如拷贝完文件,发现文件需要更改,更改完后继续拷贝过去,但服务已经启动过,注意服务重启才会生效,导致新文件无法生效,下节课就将介绍到高效的解决方法。

相关文章
|
8月前
Ansible之playbook剧本-1
Ansible之playbook剧本
91 0
|
16天前
|
算法 安全 Linux
Ansible自动化工具copy复制用法
Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务. ### 作用 将配置文件复制到远程服务器 将应用程序部署到远程服务器 将日志文件从远程服务器复制到本地计算机 备份和恢复文件和目录
Ansible自动化工具copy复制用法
|
8月前
Ansible之playbook剧本-3
Ansible之playbook剧本
48 0
|
8月前
|
Python
Ansible之playbook剧本-2
Ansible之playbook剧本
33 0
|
9月前
|
运维 关系型数据库 应用服务中间件
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
130 0
|
10月前
|
JSON Kubernetes 安全
ansible企业级实战(Markdown)
ansible企业级实战(Markdown)
140 0
|
10月前
|
应用服务中间件 PHP nginx
ansible:roles学习笔记
ansible:roles学习笔记
71 0
|
10月前
|
应用服务中间件 Linux 数据安全/隐私保护
ansible:playbook学习笔记
ansible:playbook学习笔记
99 0
|
11月前
|
Shell 网络安全 开发工具
|
12月前
|
运维 监控 应用服务中间件
自动化运维工具-Ansible的Playbook的使用
自动化运维工具-Ansible的Playbook的使用
171 0