模板管理、清单管理、并行方式
文章目录
一、模板管理
1. ansible template作用
在实际的工作中由于每台服务器的环境配置都可能不同,但是往往很多服务的配置文件都需要根据服务器环境进行不同的配置,比如nginx最大进程数,redis最大内存等。为了解决这个问题可以使用ansible的template模块,该模块和copy模块作用基本一样,都是把管理端的文件复制到客户端主机上,但是区别在于template模块可以通过变量来获取配置值,支持多种判断、循环、逻辑运算等,而copy只能原封不动的把文件内容复制过去。需要注意的是template只能在playbook中运行,不能使用命令行方式。
2. ansible template使用方法
多数情况下都会建立一个templates目录并和playbook同级,这样playbook可以直接引用和寻找这个模板文件,如果在别的路径需要单独指定。模板文件后缀名为.j2
2.1 构建jinja2模板
在jinja2中,存在三种语法:
- 控制结构 {% %}
- 变量取值 { { }}
jinja2模板中使用{ { }}语法表示一个变量,它是一种特殊的占位符。当利用jinja2进行渲染时,它会把这些特殊的占位符进行填充/替换,jinja2支持python中所有的python数``据类型比如列表、字段、对象等
- 注释 {# #}
注意:包含jinja2模板的文件不需要有任何特定的文件扩展名(.j2)。但是提供此类文件扩展名会让你更容易记住它是模板文件
# {
{ ansible_managed }}
Port {
{ ssh_port }}
ListenAddress {
{ ansible_facts['default_ipv4']['address'] }}
2.2 部署jinja2模板
jinja2模板是功能强大的工具,可用于自定义要在受管主机上部署的配置文件。创建了适用于配置文件的jinja2模板后,它可以通过template模块部署到受管主机上,该模块支持将控制节点中的本地文件转移到受管主机。
tasks:
- name: moban
template:
src: /tmp/test.j2
dest: /tmp/test.txt
template模块还允指定已部署文件的所有者、组、权限和SELINUX上下文,就像file模块一样。它也可以取用validate选项运行任意命令,在将文件复制到位之前检查该文件的语法是否正确
2.3 使用循环
jinja2使用for语句来提供循环功能。在下例中,user变量替换为users变量中包含的所有值,一行一个值
{% for user in users %}
{
{ user }}
{% endfor %}
以下示例模板使用for语句逐一运行users变量中的所有值,将myuser替换为各个值,但值为root时除外
{# for statement #}
{% for myuser in users if not myuser == "root" %}
User number {
{ loop.index }} -