1、简单格式要求

[root@ansibleserver ansible]# cat nagios.yml

---

- hosts: nagiosserver

tasks:

- name: ensure nagios service stop

service: name=nagios state=stopped

- name: ensure nagios service start

service: name=nagios state=started

a、整体格式用---开始

b、在冒号之后,必须存在一个空格

c、name和service必须对齐

d、hosts和tasks必须对齐

e、在书写key和value的时候,不能存在空格

f、 在roles中的main.yml不能使用tasks关键词,主要是因为在目录结构中已经包含了此关键词,main.yml是存在于tasks目录中。

如果违反以上规定,那么就会出错,出错内容如下:

ERROR: Syntax Error while loading YAML script, nagios.yml

Note: The error may actually appear before this position: line 3, column 1

- hosts: nagiosserver

tasks:

^

2、运行playbook

对上面格式中的nagios.yml进行运行,运行命令如下:

[root@ansibleserver ansible]# ansible-playbook nagios.yml

在上面的playbook中,存在两个任务,一个是停止nagios服务,一个是启动nagios服务,运行结果如下所示:

PLAY [nagiosserver] ***********************************************************

GATHERING FACTS ***************************************************************

ok: [192.168.1.20]

TASK: [ensure nagios service stop] ********************************************

changed: [192.168.1.20]

TASK: [ensure nagios service start] *******************************************

changed: [192.168.1.20]

PLAY RECAP ********************************************************************

192.168.1.20               : ok=3    changed=2    unreachable=0    failed=0

可以看到,定义为name的地方会在输出中进行显示,然后显示运行结果,也就是changed,从而在第一个任务中,表示关闭服务成功,第二个任务中,表示为启动服务成功,最后会显示结果,也就是OK为3,表示连接成功,关闭服务成功,启动服务成功,chenged为2,表示为进行了两次修改。

3、最佳实践

创建roles的组织目录结构可以用如下语句(一次性创建目录组织架构,修改common表示相关的roles):

mkdir -p roles/common/{tasks,handlers,templates,files,vars,defaults,meta}

总体目录结构如下所示:

[root@ansibleserver kel]# ls -l

total 28

drwxr-xr-x 2 root root 4096 Jan 27 06:23 group_vars

-rw-r--r-- 1 root root  108 Jan 28 11:35 hosts

drwxr-xr-x 2 root root 4096 Jan 28 11:34 host_vars

-rw-r--r-- 1 root root   97 Jan 27 06:21 production.yml

drwxr-xr-x 4 root root 4096 Jan 27 06:17 roles

-rw-r--r-- 1 root root   53 Jan 28 11:27 site.yml

-rw-r--r-- 1 root root   77 Jan 27 06:21 staging.yml

在定级目录中,roles和site.yml和staging.yml和production.yml,group_vars和host_vars在同一级目录中,在变量的优先级中,host_vars的变量优先级比group_vars的优先级高,使用的变量的时候,如果名字相同,那么host_vars中变量的值会覆盖group_vars中变量的值,在roles中设置变量的时候,roles中变量的优先级又比host_vars高

在这里site.yml包含staging和production的playbook,从而在这里使用的是include,在staging和production中使用的是roles,从而需要注意的是roles里的目录结构,roles的目录结构如下所示:

[root@ansibleserver kel]# cd roles

[root@ansibleserver roles]# ls -l

total 8

drwxr-xr-x 3 root root 4096 Jan 27 06:18 adduser

drwxr-xr-x 4 root root 4096 Jan 24 14:13 changepassword

[root@ansibleserver roles]# cd changepassword/

[root@ansibleserver changepassword]# ls -l

total 8

drwxr-xr-x 2 root root 4096 Jan 27 06:22 tasks

drwxr-xr-x 2 root root 4096 Jan 28 11:43 vars

[root@ansibleserver changepassword]# cd tasks/

[root@ansibleserver tasks]# ls -l

total 4

-rw-r--r-- 1 root root 140 Jan 27 06:22 main.yml

在roles中,包含的文件夹也就是staging中包含的roles,也就是一个文件夹,表示一个roles,在上面的例子中分为adduser和changepassword两个roles,在子目录中,包含tasks和vars,表示所进行的任务和变量,还有其他的文件夹没有进行创建,从而在最后是一个main.yml

分别的内容如下:

[root@ansibleserver tasks]# cat main.yml

---

#- hosts: ansibleservers

#  use the variables kel to change the user root's passwrod

- name: change the user root password

shell: 'echo "{{kel}}"|passwd --stdin root > /dev/null 2>&1'

此内容主要是用kel变量的值作为root用户的密码

[root@ansibleserver kel]# cat site.yml

---

- include: staging.yml

- include: production.yml

此中的内容,主要就是使用include语句来包含另外两个playbook

[root@ansibleserver kel]# cat staging.yml

---

- hosts: ansibleserver1

roles:

- changepassword

#      - adduser

此种的内容,主要是用来表示修改密码,使用的是roles,在使用roles的时候,注意目录结构,使用roles的方式也是推荐的一种方式。

执行的时候如下:

[root@ansibleserver kel]# ansible-playbook -i hosts site.yml

SSH password:

PLAY [ansibleserver1] *********************************************************

GATHERING FACTS ***************************************************************

ok: [192.168.1.163]

TASK: [changepassword | change the user root password] ************************

changed: [192.168.1.163]

PLAY [ansibleserver2] *********************************************************

GATHERING FACTS ***************************************************************

ok: [192.168.1.164]

TASK: [changepassword | change the user root password] ************************

changed: [192.168.1.164]

PLAY RECAP ********************************************************************

192.168.1.163              : ok=2    changed=1    unreachable=0    failed=0

192.168.1.164              : ok=2    changed=1    unreachable=0    failed=0

发现执行成功,再最佳实践里推荐的就是用roles来执行相关的任务,然后将生产环境和测试环境进行分开。

更新一下github的地址,在里面写了相关模块的例子,从而可以进行查看,以后会根据相关的东西,从而写出相关的playbook

ansibleplaybook的使用的更多相关文章

  1. ansible-playbook

    一.ansible-playbook介绍: playbook是由一个或多个"play"组成的列表.play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task ...

  2. ansible-playbook相关

    获取目标主机的信息 ansible all -m setup -a "filter=ansible_os_family" 不执行仅测试 ```sh 安装一个zabbix-agent ...

  3. ansible-playbook(nginx例)

    一.创建目录结构 cd /etc/ansible/roles/ mkdir nginx/{files,templates,vars,handlers,meta,default,tasks} -pv 二 ...

  4. ansible-playbook用法

    一.playbook用法 1.playbook的执行文件为YAML语言编写,所以文件名为xxx.yml.YAML语法可以参考https://docs.ansible.com/ansible/lates ...

  5. linux --- Ansible-playbook篇

    Ansible-playbook简介 什么是playbook? 简单点说,playbook就是ansible用于配置,部署和管控节点机器的剧本,将一系列命令的集合归一使用,类似于shell脚本,不过更 ...

  6. ansible-playbook 进行批量安装tomcat8

    ansible-playbook 进行安装tomcat操作 说明: get_url  中下载的内容直接到目的主机 安装的时候需要指定copy: no,说明需直接从目标主机进行安装包 [root@ans ...

  7. zabbix 应用监控作业笔记 ansible-playbook

    目录 目录结构 zabbix-web.yaml zabbix-backup.yaml zabbix-nfs.yaml zabbix-mysql.yaml zabbix-server.yaml zabb ...

  8. ansible-playbook 实战案例 全网备份 实时备份

    目录 ansible-playbook 基础介绍 1.YAML三板斧 2. ansible playbook 安装apache 示例 案例 全网备份 实时备份 环境规划 目录规划 base.yaml ...

  9. 2.ansible-playbook基本参数

    ansible-playbook的参数--force-handlers run handlers even if a task fails 强制执行handler--list-tags list al ...

随机推荐

  1. B/S和C/S的区别

    B/S 指的是 Browser/Server : C/S 指的是Client/Server 区别: 1. B/S最大优势为客户端免维护,适用于用户群庞大,或客户需求经长发生变化的情况. C/S功能强大 ...

  2. (三)在js(jquery)中获得文本框焦点和失去焦点的方法

    在js(jquery)中获得文本框焦点和失去焦点的方法   文章介绍两个方法和种是利用javascript onFocus onBlur来判断焦点和失去焦点,加一种是利用jquery $(" ...

  3. 防止SQL注入和XSS攻击Filter

    nbsp;今天系统使用IBM的安全漏洞扫描工具扫描出一堆漏洞,下面的filter主要是解决防止SQL注入和XSS攻击 一个是Filter负责将请求的request包装一下. 一个是request包装器 ...

  4. 二叉搜索树的两种实现(数组模拟,STL)

    书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值 ...

  5. Android模拟器使用教程

    Using the Emulator In this document Overview Android Virtual Devices and the Emulator Starting and S ...

  6. 概述hibernate入门安装配置

    1.jdbc连接的优缺点 JDBC的优点 直接底层操作,提供了很简单.便捷的访问数据库的方法,跨平台性比较强.灵活性比较强,可以写很复杂的SQL语句. JDBC的缺点 1).因为JAVA是面向对象的, ...

  7. JSON 之 SuperObject(9): TSuperType

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  8. Java关键字static、final

    static  1. static变量     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...

  9. win7防火墙开启ping

    默认情况下,Windows7出于安全考虑是不允许外部主机对其进行Ping测试的. 但在局域网环境中,Ping是测试网络情况的常用手段,如何允许 Windows7的ping测试回显呢? 打开: 控制面板 ...

  10. LA 4255 (拓扑排序 并查集) Guess

    设这个序列的前缀和为Si(0 <= i <= n),S0 = 0 每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下. 还要注意一下前缀和相等的情况,所以用一个并查集来查询. ...