标签:clu user distrib ESS 路径 ansbile depend 文件结构 需要
前言
在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,ansbile-playbook命令根据自上而下的顺序依次执行。
playbook通过ansible-playbook命令使用,它的参数和ansible命令类似,如参数-k(–ask-pass) 和 -K (–ask-sudo) 来询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过规定的单元写在playbook 。
ansible-playbook的简单使用方法: ansible-playbook play.yml
现在给出一个ansible-playbook示例
1 | --- |
hosts参数指定了对哪些主机进行操作
vars参数指定了变量
remote_user 则用于指定执行任务的用户
tasks指定了一个任务
从这个示例我们可以看出playbook的构成
1 | playbooks组成: |
普通的include:一个 task include file 由一个普通的 task 列表所组成,像这样:
1 | --- |
Include 指令看起来像下面这样,在一个 playbook 中,Include 指令可以跟普通的 task 混合在一起使用:
1 | tasks: |
参数化的 include
如果我们要部署多个 wordpress 实例,我们可将所有的 wordpress task 写在一个 wordpress.yml 文件中, 然后像下面这样使用 wordpress.yml 文件
1 | tasks: |
备注:Ansible 1.4 及以后的版本,include 语法可更为精简,这种写法同样允许传递列表和字典参数:
1 | tasks: |
Include 语句也可用来将一个 playbook 文件导入另一个 playbook 文件。这种方式允许你定义一个 顶层的 playbook,这个顶层 playbook 由其他 playbook 所组成,先看一个例子吧
1 | - name: this is a play at the top level of a file |
Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles
Ansible主要是通过一个inventory来定义role和主机之间的匹配,通过一个ini风格的配置文件来管理所有的主机,通过一个
group_vars下与主机组同名的文件来管理变量,或者host_vars下与主机同名的文件来管理变量(和pillar类似),然后按照固定的目录
结构在角色名目录下创建好files, handlers, tasks, templates,
vars(角色级别的变量)等目录;最后通过ansible命令再跟一系列的参数指定好inventory, playbooks,
user等来触发对所有主机的配置
项目的结构如下
1 | site.yml |
playbook 如下
1 | --- |
这个 playbook 为一个角色 ‘x’ 指定了如下的行为
所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。
如果 roles 目录下有文件不存在,这些文件将被忽略。比如 roles 目录下面缺少了 ‘vars/’ 目录,这也没关系。
注意:你仍然可以在 playbook 中松散地列出 tasks,vars_files 以及 handlers,这种方式仍然可用,但 roles 是一种很好的具有组织性的功能特性,我们强烈建议使用它。如果你在 playbook 中同时使用 roles 和 tasks,vars_files 或者 handlers,roles 将优先执行
也可以使用参数化的 roles,这种方式通过添加变量来实现,比如
1 | --- |
也可以为 roles 设置触发条件,像这样:
1 | --- |
它的工作方式是:将条件子句应用到 role 中的每一个 task 上。关于”条件子句”的讨论参见本文档后面的章节。
最后,你可能希望给 roles 分配指定的 tags。比如:
1 | --- |
如果 play 仍然包含有 ‘tasks’ section,这些 tasks 将在所有 roles 应用完成之后才被执行。
如果你希望定义一些 tasks,让它们在 roles 之前以及之后执行,你可以这样做:
1 | --- |
备注:如果对 tasks 应用了 tags,需确保给 pre_tasks 以及 post_tasks 也同样应用 tags,并且将它们一并传递。特别是当 pre_tasks 和 post_tasks 被用来监视 “停止窗口控制” 或者 “负载均衡” 时要确保这样做
角色默认变量(Role Default Variables)
角色默认变量允许你为 included roles 或者 dependent roles(见下) 设置默认变量。要创建默认变量,只需在 roles 目录下添加 defaults/main.yml 文件。这些变量在所有可用变量中拥有最低优先级,可能被其他地方定义的变量(包括 inventory 中的变量)所覆盖
角色依赖(Role Dependencies)
“角色依赖” 使你可以自动地将其他 roles 拉取到现在使用的 role 中。”角色依赖” 保存在 roles 目录下的 meta/main.yml 文件中。这个文件应包含一列 roles 和 为之指定的参数,下面是在 roles/myapp/meta/main.yml 文件中的示例
1 | --- |
实战nginx
1 | # mkdir -pv roles/nginx/{tasks,files,templates,handlers,vars,meta,default} |
Loops and Conditionals
1 | #use list |
The When Statement
1 | #group conditions(a logical 'or') |
备注: example requires the lsb_release package on the target host in order to return the ansible_lsb.major_release fact
ref
您的鼓励是我写作最大的动力
俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。
标签:clu user distrib ESS 路径 ansbile depend 文件结构 需要
原文地址:https://www.cnblogs.com/lijianming180/p/12268155.html