实现 playbook 高级应用和企业级实战| 学习笔记

简介: 快速学习实现 playbook 高级应用和企业级实战

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

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


playbook 高级应用和企业级实战


内容介绍

一、handlers 和 notify 结合使用触发条件

二、playbook 中 handlers 使用示例1

三、示例2

四、Playbook 中 tags 使用

五、Playbook 中变量使用


一、handlers和notify结合使用触发条件

1、Handlers(触发器)

task 列表,这些 task 与前述的 task 并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作

[root& centos7ansible ]#cat file.yml

hosts;websrvs

remote user;root

tasks:

name:create new user

user:name= test2system =yes shell=/sbin/nologin

name:install package

yum:name=httpd

name:copy html

copy:src=files/index.htmldest=/var/www/html/

name:copy test html

copy:src=files/test.htmldest=/var/www/html/

name;start service

service:name= httpd state = started nabled =yes

以上看到 tasks 是按顺序执行的,不论客户端是何状态都是顺序执行,这种顺序执行会带来问题,如果某时更新了配置文件,此配置文件复制到其他主机但不会生效,因为前次执行无此文件,之后还是按照更新前执行,这时就用到 handlers 的触发效果。

handlers tasks 是并列的关系,handlers 可以监控 tasks 里的 action 动作,当监测到 action 动作执行成功时,会初触发 handlers 后面定义的一些命令,所以需要配合一个 Notify

action 后放一个 Notify,当 action 发生变化了,就会去通知 handlers 的执行。

2、Notify

翻译为通知)此 action 可用于在每个 play 的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。

在 notify 中列出的操作称为 handler, 也即 notify 中调用 handler 中定义的操作

我们改文件:

tasks

name: install httpd package

yum:name=httpd

-namecopy conf file

copy:src=files/httpd.conf dest=/etc/httpd/conf/backup=yes

name:start service

service:name=httpdstate =startedenabled =yes

然后我们来执行:一一一一一一一一一一一一

[root@ansible ansible]#ansible-playbook httpd.yml

此时配置文件完成,但是没有生效,需要一旦发现配置文件更换就重启服务,此时就需要 handlers 和 notify:

tasks

name: install httpd package

yum:name=httpd

namecopy conf file

copy:src=files/httpd.conf dest=/etc/httpd/conf/backup=yes

notify:restart service

name:start service

service:name= httpdstate = startedenabled =yes

handlers:

name:restart service

service:name=httpd state=restarted

当看到  -namecopy conf file

copy:src=files/httpd.conf dest=/etc/httpd/conf/backup=yes

时会执行 -name:restart service

service:name=httpd state=restarted

看到写的为:

notify:restart service因为下面操作的名字为 restart service,所以写notify 要加上名字。


二、playbook 中 handlers 使用示例1

hosts:websrvs

remote_user:root

gather_facts:no

tasks:

name:Install httpd

yum:name=httpd state=present

name:Install configure file

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

notify restart servicename:ensure apache is running

service:name=httpd state=started enabled=yes

handlers:

name:restartservice

service:name=httpd state=restarted


三、示例2

-hosts:websrus

remote user;root

tasks:

name:add group nginx

tags:user

user:name=nginx state=present

name;add user nginx

user:name=nginx state=present group=nginx

name:Install Ngi

yum:name=nginx state=present

name:config

copy:src=/root/config. txt=/etc/nginx/nginx. conf

notify:

Rastart Nginx

Check Nginx Process

handlers;

name:Restart Nginx

service;name=nginx state=restarted enabled=yes

name:Check Nginx process

shell;killall-0 nginx>/tmp/nginx. Log


四、Playbook 中 tags 使用

hosts:websrvs

remote_user:root

tasks

name:install httpd package

yum:name=httpd

tags:inshttpd

-namecopy conf file

copy:src=files/httpd.conf dest=/etc/httpd/conf/backup=yes

notify:restart service

name:start servic

service:name= httpdstate=startedenabled =yes

tags:rshttpd

handlers:

name:restart service

service:name=httpd state=restarted

此时我们有了标签,就可单单执行一个标签里的服务:

[root@ansible ansible]#ansible-playbook-t rshttpd httpd.yml

这就执行了一个标签里的服务,也可启动两个标签里的多个服务:

root@ansible ansible]#ansible-playbook -tinshttpdrshttpd httpd.yml

多个动作共用一个标签也是可以的

tasks

-name:install httpd package

yum:name=httpd

tags:httpd

-namecopy conf file

copy:src=files/httpd.conf dest=/etc/httpd/conf/backup=yes

notify:restart service

name:start service

service:name=httpdstate=startedenabled=yes

tags:httpd

handlers:

-name:restartservice

service:name=httpd state=restarted

此时 httpd 就执行了两个标签。

示例:

httpd.yml

hosts:websrvs

remoteuser:root

tasks:

name:Installhttp

yum:name=httd state=present

name:Installconfigure file

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

tags:con

-name:starthttpd service

tags:service

service:name=httpdstate =startedenabled =yes

ansible-playboot conf httpd .yml


五、Playbook 中变量使用

playbook 中定义死板,若借助变量,针对不同的场景,运用不同的变量,不同的主机,实现不同的操作。

变量名:仅能由字母、数字和下划线组成,且只能以字母开头

变量来源:

1 ansible setup facts 远程主机的所有变量都可直接调用

[root@ansible ansible]#ansible websrvs-msetup

执行后会显示此主机状态信息包括地址、架构、主机名等等。

如想单一查看主机名时:

root@ansibleansible]#ansiblewebsrvs-msetugrepansiblefqdn

当然更高级的:

root@ansibleansible]#ansiblewebsrvsmsetup‘filter=ansible_hostname’同样通配符也可以。

root@ansibleansible]#ansiblewebsrvs-msetup-a ‘filter=ansibleeth*‘可查看网卡信息。

2在 /etc/ansible/hosts 中定义

普通变量:主机组中主机单独定义,优先级高于公共变量。

公共(组)变量:针对主机组中所有主机定义统一变量。

它可以针对单一主机也可对一组主机来操作赋值

hosts:websrvs

remote user:root

tasks:

name:Install httpd

hostname:name=www{{http_port}}.magedu.com

这就在 hosts 中完成定义。一一一一一一一一一

3通过命令行指定变量,优先级最高

ansible-playbook-e varname=value

[root@ansible ~]#vimapp.yml

hosts: websrvs

remote_user: root

tasks:

-name:install package

yum: name={{pkname}}

name:start service

service:name={{pkname}} state=started enabled=yes

此时如何执行 playbook 的时候指定变量名,此时用 -e 来赋值:

[root@ansibleansible]#ansible-playbook-e "pkname=vsftpdapp.yml hosts:websrv

remote_user: root

tasks:

-name: installpackage

yum:name={{pkname1}}

-name:startservice

yum: name={{pkname2}}

[root@ansible ansibl]#ansible-playbook -e "pkname1=httpdpkname2=memcached‘app.yml

此时给两个变量赋值。一一一一一一一

4在 playbook 中定义

vars:

-var1:value1

-var2:value2

示例:

[root@ansible ~]#vimapp.yml

- hosts:appsrvs

remote_user:root

vars:

-pkname1:httpd

-pkname2:vsftpd

tasks:

-name:installpackage

yum:name={{pkname1}}

-name:startservice

yum: name={{pkname2}}

此时直接执行 playbook 就行:

[root@ansibleansible]#ansible-playbookappyml

5、在 role 中定义

6、变量命名:变量名仅能由字母、数字和下划线组成,且只能以字母开头。一一

7、变量定义:

key=value

示例: http_port=80

8、变量调用方式:

通过 {{ variable _ name }} 调用变量,且变量名前后必须有空格,有时用“{{ variable_name}}”才生效一一一一一一一一一一一一

Fansible-playbook-e选项指定一一一一一一一一一一一一

ansible-playbooktest.yml-e"hosts=wwwuser=mageedu"

playbook 像我们跟脚本一样编脚本会涉及到循环条件判断,将来 playbook也都如此,所以需要有一定的逻辑性。playbook 的基本写法,一定要注意:

[root@ansibleansible ]#cathostname'yml

hosts:websrvs

remote user;root

tasks:

name:set hostname

hostname:name={{nodename}}{{http_port}}.{{domainname}}

这里面是不能少的, remote user 然后一个个 tasks。

之后的 handlers notify 是要同时使用的不能独立使用,当一个动作发生的时候,触发另一个动作的执行。

然后讲 tags 标签后又补充了变量的使用变量可以在好几个地方来定义你可以在命令行中定义,也可以在主机清单里面定义,还可以在 playbook 里面定义

相关文章
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:Ansible实战指南
【9月更文挑战第18天】在追求效率和稳定性的今天,自动化运维已成为IT领域的热门话题。本文将引导你通过实际案例学习如何使用Ansible进行自动化配置管理、任务执行和流程编排,从而提升你的工作效率并减少人为错误。我们将从基础概念出发,逐步深入到高级应用,让你能够轻松掌握这一强大的自动化工具。
|
19天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
2月前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
77 36
|
2月前
|
运维 持续交付 开发工具
自动化运维工具:Ansible入门教程
【8月更文挑战第60天】在现代IT运维管理中,自动化工具的使用已成为提高生产效率、减少人为错误和确保环境一致性的重要手段。本文将介绍Ansible——一款流行的开源自动化运维工具,通过其简单易学的语法和强大的功能,帮助读者快速入门并实现自动化部署和管理。我们将从Ansible的基本概念讲起,逐步深入到实际的代码示例,展示如何利用Ansible简化日常的运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技巧,让你轻松驾驭Ansible,开启自动化运维之旅。
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
2月前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
|
3月前
|
运维 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
|
3月前
|
运维 Ubuntu 应用服务中间件
自动化运维的利器:Ansible入门与实战应用
【8月更文挑战第28天】在现代IT运维领域,自动化已成为提升效率、确保一致性和可靠性的关键。本文将引导读者了解Ansible——一种流行的自动化工具,它通过简化配置管理、部署和任务自动化流程,助力运维人员轻松应对日常挑战。从基础安装到高级用法,我们将一步步探索Ansible的魔力,并通过实际案例展示如何有效利用Ansible优化运维工作。无论你是初学者还是有经验的管理员,这篇文章都将为你提供宝贵的知识和技能,让你的运维之旅更加顺畅。
|
3月前
|
运维 Linux Apache
自动化运维工具:Ansible入门与实战
【8月更文挑战第31天】 本文将引导读者理解自动化运维的重要性,并通过介绍Ansible这一强大的自动化工具,展示如何简化和加速IT管理任务。文章不仅讲解了Ansible的基础概念,还通过实例展示了如何配置和使用Ansible进行日常的运维工作,包括部署、配置管理和任务自动化等。无论你是运维新手还是希望提高现有工作流程的效率,这篇文章都会为你提供实用的知识和技能。
|
负载均衡 关系型数据库 Linux
实战案例——Ansible部署高可用OpenStack平台
实战案例——Ansible部署高可用OpenStack平台
689 0
下一篇
无影云桌面