欢迎访问我的博客,你的支持,是我最大的动力!

Ansible使用指南-02-Playbook

Ansible 小马奔腾 620℃ 评论
目录:
[显示]

Playbook 基础

每个playbook称为一个剧本,其中的一系列任务称为戏剧(play)

yaml 语法

多行缩进
连续项目通过减号 - 表示,列表 []
map结构的key/value用冒号分隔 {}
字符串不一定要用双引号标识
文档开始 ---
选择性符号 ... 可用来表示文档结尾
#表示注释

yaml教程:http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行
+ 表示保留文字块末尾的换行,- 表示删除字符串末尾的换行
锚点 & 和别名 * ,可以用来引用,如
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点
&defaults
<<: *defaults

一个例子

#!/bin/bash

yum install --quiet -y httpd httpd-devel
cp /root/httpd.conf /etc/httpd/conf/httpd.conf
systemctl start httpd
systemctl enable httpd

转换为playbook

注意:一个play下只能有一个command 若存在多条 则只有最后一条生效

对playbook进行优化,使用yum、copy、service模块

当重复执行一个playbook时,当发现系统现有状态与playbook所定义要实现的状态一致时,会自动跳过该操作

检查playbook
显示每步的执行情况 但不真执行
ansible-playbook test.yaml -C
ansible-playbook test.yaml --check

playbook 实用技巧

1、限定执行范围
--limit
不修改playbook中定义的hosts,限定执行的主机
ansible-playbook test.yaml -C --limit 192.168.1.78   #假如 hosts: all
###
--list-hosts
不执行 仅显示受影响的主机
ansible-playbook test.yaml --list-hosts

2、用户与权限设置
--remote-user
该项目在playbook中设置
设置用于ssh连接的用户,不设置默认为当前系统用户
###
--ask-sudo-pass  废弃
传递sudo密码到远程主机
###
--ask-become-pass -K
传递权限密码
###
--become -b
运行命令的用户,默认为root 可通过 --become-user 指定用户

3、playbook其他参数
--inventory=Path -i Path 指定inventory文件
--verbose -v 显示详细输出 -vvvv 显示精确到每分钟的输出
--extra-vars=Vars -e Vars 定义playbook使用的变量,格式为 "key=value,key=value"
--forks=num -f num 并发任务数
--connection=Type -c Type 连接远程主机的方式,默认ssh 设置为local时,只在本地执行
--check -C 检测模式不执行
--syntax-check 检查语法

ansible-playbook dddd.yaml -k -K --become-method=su
-k --ask-pass 是SSH连接密码
-K --ask-become-pass 提权密码 sudo方式为连接帐户密码 su方式为root密码
--become-method=su  指定提权方式
-b, --become
--become-user=BECOME_USER
注意,如果用sudo模式提权,要求该用户在sudoers文件中,否则会报错:xxx is not in the sudoers file. This incident will be reported.
解决办法是:使用su模式 或添加用户权限,visudo 添加 xxx ALL=(ALL) ALL

实例1 部署Node.js

copy 模块,在单个文件和少量文件时很好用,但复制大量文件时,不能胜任
synchronize 模块,适用于复制整个目录,处理大量文件
unarchive 模块,复制一个归档,然后展开它

程序运行部分,
register 创建一个新的变量 forever_list 用于下一任务作判断,register保存命令的输出,包括标准输出和错误输出
changed_when 明确告诉这个命令是否对主机造成影响,这里 forever list命令不会导致服务器改变,所以设置其值为false
when 当forever_list中没有指定内容时,触发任务启动

ansible-playbook node.js.yaml --extra-vars="node_apps_location=/usr/local/opt/node"  #覆盖变量

实例2 部署LAMP下的Drupal

Drupal是PHP开发的开源内容管理框架CMF,由内容管理系统CMS和开发框架构成

playbook中可以引用变量文件,变量文件可以实现变量的集中管理

prea_task 在主任务运行前运行的任务
post_task 在主任务运行后运行的任务
handlers 是一种特殊的任务类型,可通过 notify 选项加 handlers 名称来触发 handlers中定义的任务
注意,对notify中触发的handlers,若在多个play中都引用了,则所有任务都运行成功时,才会触发handlers
默认,当playbook中任务执行失败时,会停止所有的任务,也不会触发任何本该触发的handlers,若要求handlers能被正常触发,可使用 --force-handlers 选项

service 模块支持的参数:daemon_reload, enabled, force, masked, name, no_block, scope, state, user
absent 、present 分别表示删除和安装

lineinfile模块,编辑文件内容,dest定义要编辑文件,regexp匹配要操作的行,line是修改后的内容,state:present 将修改写入文件

# 开启PHP的apc.rfc1867选项,用于支持上传进度条功能

Ansible支持MongoDB、MySQL、PostgreSQL、Redis、Riak等数据库
对MySQL,使用python的MySQLdb模块(MySQL-python)对数据库进行管理,默认root免密登录,注,需要安装MySQL-python模块,该包在base源中
注意,PIP安装MySQL-python需要主机有mysql_config,所以不建议用pip安装

注意,使用 lineinfile 修改文件内容时,需要使用backrefs=yes项
backrefs默认为no 表示匹配则替换 不匹配则添加;为yes时 不匹配时不做修改

注意:使用 shell 的mv命令时,需要指定执行程序为/bin/bash 默认的/bin/sh会报错,executable=/bin/bash

file 模块可以修改文件属性,包括属主、权限等,处理目录时,recurse=yes 可以递归进行处理

上例未能安装好 Drupal ,卡在使用 drush 安装 drupal的过程中,以及php55与apache的集成也没有处理好,等续
参考:CentOS7.3 安装Apache2.4 + PHP7.1 + MySQL5.6 https://www.jianshu.com/p/1f17a69f6dcf
CentOS7上的LAMP搭建与Drupal8安装及建站初步 https://blog.csdn.net/wzyfhyh/article/details/79696816

实例3 部署Toncat环境并运行Apache Solr

service模块的参数名称:daemon_reload, enabled, force, masked, name, no_block, scope, state, user

tomcat.yml同级目录下的文件:
jdk-8u161-linux-x64.tar.gz    #jdk软件包
tomcat.service   #tomcat服务配置
tomcat.yml   #playbook
vars.yml    #变量文件
web.xml   #solr配置文件

tomcat.service

web.xml
修改/opt/solr/solr-6.6.5/server/solr-webapp/webapp/WEB-INF/web.xml
去掉40行 46行的注释,并将第43行修改为:
<env-entry-value>/opt/solr/solr-6.6.5/server/solr</env-entry-value>
将第168-182行注释掉,不然安装出来的solr没有权限

vars.yml

tomcat.yml

运行:
ansible-playbook tomcat.yml
访问:
http://192.168.1.120:8080/solr/index.html

转载请注明:轻风博客 » Ansible使用指南-02-Playbook

喜欢 (0)or分享 (0)