本文以ansible官网提供的tomcat-standalone实例对ansible playbook的一些结构,如何执行等进行讲解。实例地址: https://github.com/ansible/ansible-examples/tree/master/tomcat-standalone
首先我们先看一下这个实例的结构,如下
从结构上看,有一个hosts文件,我们可以猜测这个host文件里面应该放置了一些host信息,用来配置playbook将在哪些managed node(host)上执行。 然后有一个site.yml,我们可以猜测这个文件应该是一个playbook文件。然后有一个group_vars文件夹,应该是定义一些group相关的变量,roles文件夹应该是存放不同roles的一些playbook文件或者其他普通文件。
为了验证我们的猜测是否正确,我们直接去官网看一下文档给出的ansible-playbook执行命令,如下:
ansible-playbook -i hosts site.yml
如果你熟悉ansible-playbook命令,你就知道-i是指定inventory文件路径,site.yml就是我们要执行的playbook文件。如果不熟悉ansible-playbook命令,可以参考Ansible常用命令使用介绍。通过分析我们发现我们的猜测是正确的。
host文件那我们接下来看一下hosts文件内容,具体如下:
[tomcat-servers] webserver1
我们发现hosts文件很简单,定义了一个tomcat-servers group,这个group中,我们定义了一个host,就是webserver1(注:这里的webserver1是值你要管理的某台host的域名或者ip)。
对于inventory详解,可参考ansible inventory详解
site.yml文件是我们的playbook文件,我们先来看看里面的内容
# This playbook deploys a simple standalone Tomcat 7 server.
- hosts: tomcat-servers
remote_user: root
become: yes
become_method: sudo
roles:
- selinux
- tomcat
我们可以看到,这个playbook中定义了一个play tomcat-servers, 该play下面引入了2个role(角色)selinux和tomcat.关于role更详细介绍可参考ansible role详解
group_vars由于我们这个项目是通过ansible-playbook去执行playbook的,所以group_vars文件夹是跟site.yml文件同级的。具体可参考group_vars和host_vars
在group_vars下面有一个文件tomcat-servers,用于定义group级别的变量。在这里我们的group all级别的变量。
# Here are variables related to the Tomcat installation http_port: 8080 https_port: 8443 # This will configure a default manager-gui user: admin_username: admin admin_password: adminsecretroles
然后我们再去看一下roles文件夹,在roles下面有2个文件夹,分别是我们定义的role selinux和tomcat。
然后再来看role selinux,在这个role下面,有一个文件夹tasks,里面有个main.yml(这个跟我们roles要求的格式一样)主要用来定义各种task,我们就不细讲。
再来看tomcat role,下面有files, handlers, tasks和templates,结构也都是我们roles所规定的。如果还不熟悉roles的,可参考ansible roles详解
到这里我们对于这个项目的基本分析就完成了,关于每个task具体解释,后续会有相关文档进行详细介绍。



