使用jinja2模板部署自定义文件和管理大项目

本文介绍了如何使用Jinja2模板在Ansible中部署自定义文件和管理大型项目。内容涵盖了Jinja2模板的构建、部署、变量使用,以及如何利用主机模式选择主机、管理动态清单等高级技巧,旨在帮助系统管理员更有效地自动化配置管理。
摘要由CSDN通过智能技术生成

使用jinja2模板部署自定义文件

jinja2简介

Ansible将jinja2模板系统用于模板文件。Ansible还使用jinja2语法来引用playbook中的变量。

变量和逻辑表达式置于标记或分隔符之间。例如,jinja2模板将{% EXPR %}用于表达式或逻辑(如循环),而{ { EXPR }}则用于向最终用户输出表达式或变量的结果。后一标记在呈现时将被替换为一个或多个值,对最终用户可见。使用{# COMMENT #}语法括起不应出现在最终文件中的注释。

在下例中,第一行中含有不会包含于最终文件中的注释。第二行中引用的变量被替换为所引用的系统事实的值。

[root@localhost ansible]# vim playbook/test.j2
{
   {
    ansible_facts['default_ipv4']['address'] }}
[root@localhost ansible]# vim playbook/test.yml
---
- name: test
  hosts: 192.168.101.200
  tasks:
    - name:
      template:
        src: /etc/ansible/playbook/test.j2
        dest: /opt/abc
[root@localhost ansible]# ansible-playbook playbook/test.yml 

PLAY [test] *************************************************************************************

TASK [Gathering Facts] **************************************************************************
ok: [192.168.101.200]

TASK [template] *********************************************************************************
changed: [192.168.101.200]

PLAY RECAP **************************************************************************************
192.168.101.200            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


[root@mysql opt]# cat abc 
192.168.101.200

构建jinja2模板

jinja2模板由多个元素组成:数据、变量和表达式。在呈现jinja2模板时,这些变量和表达式被替换为对应的值。模板中使用的变量可以在playbook的vars部分中指定。可以将受管主机的事实用作模板中的变量。

请记住,可以使用ansible system_hostname -i inventory_file -m setup命令来获取与受管主机相关的事实。

下例演示了如何使用变量及Ansible从受管主机检索的事实创建/etc/ssh/sshd_config的模板。当执行相关的playbook时,任何事实都将被替换为所配置的受管主机中对应的值。

注意:包含jinja2模板的文件不需要有任何特定的文件扩展名(如.j2)。但是,提供此类文件扩展名会让你更容易记住它是模板文件。

# {
   { ansible_managed }}
# DO NOT MAKE LOCAL MODIFICATIONS TO THIS FILE AS THEY WILL BE LOST

Port {
   {
    ssh_port }}
ListenAddress {
   {
    ansible_facts['default_ipv4']['address'] }}

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTHPRIV

PermitRootLogin {
   {
    root_allowed }}
AllowGroups {
   {
    groups_allowed }}

AuthorizedKeyFile /etc/.rht_authorized_keys .ssh/authorized_keys

PasswordAuthentication {
   {
    passwords_allowed }}

ChallengeResponseAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials no

UsePAM yes

X11Forwarding yes
UsePrivilegeSeparation sandbox

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

Subsystem sftp /usr/libexec/openssh/sftp-server

部署jinja模板

jinja2模板是功能强大的工具,可用于自定义要在受管主机上部署的配置文件。创建了适用于配置文件的jinja2模板后,它可以通过template模板部署到受管主机上,该模块支持将控制节点中的本地文件转移到受管主机。

若要使用template模块,请使用下列语法。与src键关联的值指定来源jinja2模板,而与dest键关联的值指定要在目标主机上创建的文件。

tasks:
- name:
template:
src: /etc/ansible/playbook/test.j2
dest: /opt/abc

template模块还允许指定已部署文件的所有者、组、权限和SELINUX上下文,就像file模块一样。它也可以取用validate选项运行任意命令(如visudo -c),在将文件复制到位之前检查该文件的语法是否正确。

有关更多详细信息,请参阅ansible-doc template

管理模板文件

为避免系统管理员修改Ansible部署的文件,最好在模板顶部包含注释,以指示不应手动编辑该文件。

可使用ansible_managed指令中设置的"Ansible managed"字符串来执行此操作。这不是正常变量,但可以在模板中用作一个变量。ansible_managed指令在ansible.cfg文件中设置:

[root@localhost ansible]# vim ansible.cfg 
ansible_managed = 不要修改
[root@localhost ansible]# vim playbook/test.j2
{
   {
    ansible_facts['default_ipv4']['address'] }}
{
   {
    ansible_managed }}
[root@localhost ansible]# vim playbook/test.yml
---
- name: 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值