ansible PlayBook

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible PlayBook相关的知识,希望对你有一定的参考价值。

**一、PlayBook的作用** 之前的模块都是使用Ad-hoc方式(Ad-hoc方式是一种可以快速输入的命令,而且不需要保存起来的命令,相当于bash中的一句 话shell)点对点命令执行,可以管理远程主机,但如果服务器数量比较多,配置信息也比较多,可以利用Ansible PlayBook 编 写剧本,以更加简便的方式实现任务处理的自动化和流程化。 **二、PlayBook组成及参数详解** PlayBook是由一个或多个“play”组成的列表,play的主要功能是为Ansible中的task定义好的角色,指定剧本对应的服务器 组。 相当于task是一个任务,task调用Ansible的各种模块,将多个play组织在一个playbook剧本中,全部组成一个完整的流程控 制集合 1、PlayBook组件包括 target:定义PlayBook的远程主机组 variable:定义PlayBook使用的变量 task:定义远程主机上执行的任务列表 handler:定义task执行完成后需要调用的任务,例如修改配置文件之后,启动跟handler任务重启相关联的服务 2、target常用参数详解 hosts:定义远程主机组 user:执行该任务的用户 sudo:设置为yes的时候,执行任务使用root权限 sudo_user:指定sudo的普通用户 connection:默认基于SSH链接客户端 gather_facks:获取远程主机facts基础信息 3、variable常用参数详解 vars:定义格式,变量名:变量值 vars_files:指定变量文件 vars_prompt:用户交互模式自定义变量 setup:模块取远程主机的值 4、task常用参数详解 name:任务显示名称也是屏幕显示信息 action:定义执行的动作 copy:复制本地文件到远程主机 template:复制本地文件到远程主机,可以引用本地变量 service:定义服务的状态 基于Ansible PlayBook还可以收集命令、创建任务集,可以大大降低管理工作的复杂程度,PlayBook采用YAML语法结构 **三、YAML语言特性** YAML(yet another markup language)是一种直观的能被电脑识别的数据序列化格式,是一个容易阅读,和脚本语言交互,用 来表达资料序列的编程语言。YAML使用空白字符和分行来分隔资料,适合用Python、Ruby、Perl、grep来操作。 YAML语言特性为: 可读性强 和脚本语言的交互性好 使用实现语言的数据类型 一致的信息模型 易于实现 可以基于流来处理 可扩展性强 四、Ansible PlayBook示例 (1)判断是否需要安装某个服务 检测远程主机是否由nginx服务,不存在则安装nginx服务,安装完成后并启动nginx 1.1 编写脚本 PlayBook代码如下,文件名是xxx.yml #apache --- - hosts: huawei user: xiaowang become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo tasks: - name: Apache server Install yum: name=httpd state=installed notify: #notify”这个action可用于在每个play的最后被触发,notify中调用handler中定义的操作 - start httpd handlers: - name: start httpd service: name=httpd state=started enabled=yes ansible-playbook apache.yml -i /etc/ansible/ssh/hosts (2)PlayBook远程修改配置文件 安装好了之后,我们可以把http的发布页面从本地发送给远程服务器上面去 这是只需要在tasks里面添加一个任务即可 代码如下: #apache --- - hosts: huawei user: xiaowang become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo tasks: - name: Apache server Install yum: name=httpd state=installed notify: #notify”这个action可用于在每个play的最后被触发,notify中调用handler中定义的操作 - start httpd - name: Apache server index.html Update copy: src=/mnt/index.html dest=/var/www/html/ mode=644 handlers: - name: start httpd service: name=httpd state=started enabled=yes (3)PlayBook自定义模版 Ansible PlayBook还可以自定义template模版文件,模板文件主要是用于服务器需求不一致、需要独立定义的情况。 templates模板: 功能:根据模块文件动态生成对应的配置文件 使用方法: (1)templates文件必须存放在templates目录下,且以.j2为后缀 (2)templates模块只能被playbook调用 (3)yam文件需和templates目录平级,目录结构如下: ./ ├── temnginx.yml └── templates └── nginx.conf.j2 **示例1:使用template传输配置文件** 创建templates目录 cp /etc/nginx/nginx.conf templates/nginx.conf.j2 vim testtemplate.yml --- – hosts: huawei become: yes become_method: sudo user: xiaowang tasks: – name: install package yum: name=nginx – name: copy template template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf – name: start service service: name=nginx state=started enabled=yes ansible-playbook testtemplate.yml -i /etc/ansible/ssh/hosts 示例2:template引用系统变量 **ansible roles角色** playbook roles角色这个词一直不知道怎么解释,这么说吧,我们常用的lnmp环境,可以分为nginx 管理、mysql管理、php 管理等,如果我们使用playbook写成一个文件,这个文件会很大,但是不方 便组织,我们可以分组,将 其按大组分类,再细分为 具体的小任务。

以上是关于ansible PlayBook的主要内容,如果未能解决你的问题,请参考以下文章

ansible-playbook 可用参数

Ansible playbook

ansible playbook剧本

ansible playbook剧本

ansible playbook剧本

Ansible 二: playbook