博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ansible playbook及 示例
阅读量:6912 次
发布时间:2019-06-27

本文共 5333 字,大约阅读时间需要 17 分钟。

Ansible-playbook 介绍

Playbook 是由一个或多个 play组成的列表,主要功能是将task定义好的角色归并为一组进行统一管理,也就是通过task调用Ansible的模板将多个play组织在一个Playbook中运行

Playbooks本身由以下各部分组成

(1) Tasks:任务,即调用模块完成的某操作

(2) Variables:变量

(3) Templates:模板

(4) Handlers:处理器,当某条件满足时,触发执行的操作

(5) Roles:角色

Hosts和Uses介绍

Playbook的设计目的是为了让某个或某些主机以某个用户的身份去执行相应的任

务。其中用于指定要执行指定任务的主机用 hosts定义,可以是一个主机也可以是由冒
号分隔的多个主机组;用于指定被管理主机上执行任务的用户用 remote user来定义。

- hosts: webserver               ##指定主机组,可以是一个或多个组。  remote_user: root                ##指定远程主机执行的用户名

任务列表 和 action介绍

Play的主体是任务列表。任务列表中的任务按照次序逐个在hosts中指定的所有主机上执行,在顺序执行这些任务时,如果发生错误会将所有已执行任务

回滚,因此,需要在更正 Playbook中的错误后重新执行这些任务
task的任务是按照指定的参数去执行模块。每个task都使用name输出 Playbook
的运行结果,一般输出内容为描述该任务执行的步骤,如果没有提供将输出 action的
运行结果。
定义task的格式可以用 action: module options或 module: options,其中后者可以实
现向后兼容。如果 action的内容过多,可在行首使用空白字符进行换行。

示例

- hosts: abc  remote_user: root  tasks:   - name: disable selinux     command: '/sbin/setenforce 0'    ##关闭selinux   - name: make sure apache is running     service: name=httpd state=started    ##开启httpd服务##play中只要执行命令的返回值不为0,就会报错,tasks停止加上下面这句话 可以强制执行ignore_errors: True             ##忽略错误,强制返回成功

Handlers 介绍

Handlers用于当关注的资源发生变化时所采取的操作。在 notify中列出的操作便

称为 handler,也就是在notify中需要调用 handler中定义的操作。而 notify这个动作在
每个play的最后被触发,仅在所有的变化发生完成后一次性地执行指定操作。

示例

- hosts: abc  remote_user: root  tasks:   - name: install httpd package     yum: name=httpd state=latest    ##按照最新版本的httpd服务   - name: install configuration file for httpd     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf   ##配置文件     notify:      -restart httpd    ##调用名字为 restart httpd 的handler   - name: start httpd service     service: enabled=true name=httpd state=started   ## 开启httpd服务  handlers:   - name: restart httpd     service: name=httpd state=restarted

Templates介绍

Jinja是基于 Python的模板引擎。 Template类是 Jinja的另一个重要组件,可以看

作是一个编译过的模板文件,用来产生目标文本,传递 Python的变量给模板去替换模
板中的标记。

示例

从被管理端复制一份httpd.conf到管理端并做如下修改vi templates/httpd.conf      Listen {
{http_port}}ServerName {
{server_name}}MaxClients {
{access_num}}vi /etc/ansible/hosts[aaa]192.168.x.x http_port=192.168.x.x:80 access_num=100 server_name="www.aaa.com:80"## 在hosts文件为主机配置变量vi httpd.yml- hosts: aaa remote_user: root vars: - package: httpd - service: httpd tasks: - name: install httpd package yum: name={
{package}} state=latest ##安装最新版本的httpd - name: install configure file template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf ##使用模板并根据变量进行配置 notify: - restart httpd ##调用handler - name: start httpd server service: name={
{service}} enabled=true state=started ##开启服务 handlers: - name: restart httpd service: name={
{service}} state=restarted

Tags 介绍

如果多次执行修改 Playbook 会涉及到一些没有变化的代码,可以使用tags让 用户选择跳过没有变化的代码。只运行Playbook中发生变化的部分代码。可以在Playbook中为某个或某些任务定义“标签”,在执行此Playbook时通过 ansible-playbook命令 使用 --tags 选项能实现仅运行指定的tasks。

示例

vi hosts.yml- hosts: aaa  remote_user: root  tasks:    - name: Copy hosts file      copy: src=/etc/hosts dest=/etc/hosts      tags:      - only    - name: touch file      file: path=/opt/hosts state=touch执行命令:ansible-playbook hosts.yml --tags="only"会只执行标签为 only的任务事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。如果在上面的yaml文件中添加- name: touch file      file: path=/opt/hosts state=touch      tags:      - always执行命令:ansible-playbook hosts.yml --tags="only"会将两个task都执行

Roles 介绍

Ansible为了层次化、结构化地组织 Playbook,使用了角色( roles),可以根据层

次结构自动装载变量文件、 tasks以及 handlers等。只需要在 Playbook中使用 include
指令即可使用 roles。简单来讲, roles就是通过分别将变量、文件、任务、模块及处理
器设置于单独的目录中,便捷地使用他们。

示例

本示例为:安装搭建LAMP架构roles内各目录含义解释files:用来存放由copy模块或script模块调用的文件。templates:用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量。defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。meta:此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,但不可以不创建。mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -pmkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -pmkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p在每个角色的handlers、tasks、meta、defaults、vars目录下创建main.yml文件,千万不能自定义。touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.ymltouch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.ymltouch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml------编写httpd模块------vi /etc/ansible/roles/httpd/tasks/main.yml- name: ensure apache is at the latest version   yum: pkg={
{ pkg }} state=latest定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中vi /etc/ansible/roles/httpd/vars/main.ymlpkg: httpd-------编写mysql模块-------vi /etc/ansible/roles/mysql/tasks/main.yml- name: ensure mysql is at the latest version yum: pkg={
{ pkg }} state=latestvi /etc/ansible/roles/mysql/vars/main.ymlpkg: mariadb*-------编写php模块-----vi /etc/ansible/roles/php/tasks/main.yml- name: ensure php is at the latest version yum: pkg={
{ pkg }} state=latestvi /etc/ansible/roles/php/vars/main.ymlpkg: php*-----编写roles示例-----vi /etc/ansible/lamp.yml- hosts: aaa remote_user: root roles: - httpd - mysql - php

转载于:https://blog.51cto.com/13625924/2154950

你可能感兴趣的文章
.net reactor使用教程(一)——界面各功能说明
查看>>
教你在Docker上不到2分钟建立一个多模型数据库!
查看>>
python输入输出语句
查看>>
HTTPS时代的到来是大势所趋!阿里云CDN如何助力企业网站进入HTTPS时代
查看>>
Linux 积极使用swap空间
查看>>
等待事件之Log File Sync
查看>>
php测试kafka
查看>>
js获取两个日期之间时间差(天数)
查看>>
Memcached 简介
查看>>
虚拟化二、Xen虚拟化技术
查看>>
Oracle 11g数据库随系统自动启动与关闭的设置方法
查看>>
git pull force
查看>>
使用new操作符来调用一个构造函数的时候发生了什么
查看>>
交换机配置vlan 访问控制列表
查看>>
Python面向对象之类的成员
查看>>
Win8上iis配置
查看>>
Confluence 6 配置 Office 转换器
查看>>
Grin交易原理详解
查看>>
大数据体系【概念认知】系列-2:存储以及副本策略
查看>>
Apache与Tomcat区别联系
查看>>