12_Ansible Jinja2 템플릿 개요, Jinja2 사용법, Jinja2 사용 시 주의사항, jinja2 템플릿 사용, 변수 사용 구문, Jinja2 템플릿 논리 판단 구문, Jinja2 템플릿 루프 구문, 주석 등

15. Ansible Jinja2 템플릿 15.1
jinja2 템플릿 개요 15.1.1 jinja2 템플릿
이란 15.1.2 jinja2
와 Ansible 의 관계 15.2.1 변수 사용 구문 15.2.2 Jinja2 템플릿 논리 판단 구문 15.2. 3. Jinja2 템플릿 루프 구문 15.2.4. 주석 15.3. Jinja2 템플릿 테스트 15.3.2. 예제 2








15. Ansible Jinja2 템플릿

출처: https://blog.csdn.net/weixin_48981270/article/details/117756914

15.1 jinja2 템플릿 개요

15.1.1 jinja2 템플릿이란?

jinja2는 완전한 기능을 갖춘 Python용 템플릿 엔진입니다.

15.1.2 jinja2와 Ansible의 관계

Ansible은 주로 jinja2 템플릿을 사용하여 관리되는 호스트 등의 구성 파일을 수정합니다.jinja2는 saltstack에서도 사용됩니다.redis가
100개의 호스트에 설치되면 각 redis의 수신 주소가 다릅니다.해결 방법은?

15.1.3 앤서블이 Jinja2를 사용하는 방법

Ansible의 jinja2 템플릿을 사용하는 것은 파일을 원격 호스트로 복사하는 copy 모듈과 동일한 템플릿 모듈을 사용하는 것이지만 템플릿 모듈은 파일에 있는 변수를 가져올 수 있는 반면 복사본은 그대로 유지한다는 차이점이 있습니다. 과거의 파일 내용을 복사합니다. 예전에 rsync의 백업 스크립트를 푸시할 때 스크립트에 있는 변수 이름을 호스트 이름으로 변경하고 싶었는데 복사 모듈을 사용했다면 { { ansible_fqdn }}을 변경하지 않고 푸시했습니다. 템플릿을 사용 했다면 해당 CPU 이름이 됩니다.

15.1.4 Ansible에서 Jinja2 사용시 주의사항

Ansible은 jinja2 템플릿에서 조건부 판단 및 루프를 사용할 수 있지만 플레이북에서는 사용할 수 없습니다.
참고: 모든 관리자에게 이 기능이 필요한 것은 아니지만 때로는 jinja2 모듈이 효율성을 크게 향상시킬 수 있습니다.

15.2 Ansible jinja2 템플릿 사용

15.2.1 변수 사용 구문

{ { EXPR }} 출력 변수 값, 사용자 정의 변수 값 또는 사실을 출력합니다. 1.
플레이북 파일은 템플릿 템플릿을 사용합니다
. 2. 템플릿 파일의 변수는 { { PORT }}와 같은 { { 이름 }}을 사용 하거나 사실을 사용합니다.

15.2.2.Jinja2 템플릿 논리 판단 구문

#shell中的判断语法
[root@m01 project]# vim pd.sh 
#!/bin/bash
age=$1
if [ $age -lt 18 ];then
    echo "小姐姐"
else
    echo "大妈"
fi

#Jinja2模板判断语法
#条件判断
{
    
    % if EXPR %}
{
    
    % elif EXPR %}
{
    
    % else %}
{
    
    % endif %}

15.2.3 Jinja2 템플릿 루프 구문

#shell中的循环
[root@m01 project]# vim xh.sh
#!/bin/bash
for i in `seq 10`
  do
      echo $i
  done
  
#Jinja2模板循环语法
#循环表达式
{
    
    % for i in EXPR %}
{
    
    % endfor %}

15.2.4 참고 사항

# shell中的注释
使用#写在注释内容最前面

#Jinja2模板注释语法
{
    
    # COMMENT #}

15.3 Jinja2 템플릿 테스트

15.3.1 예제 1

1) 로그인 파일용 jinja2 템플릿 구성

[root@node2 workspace]# cat motd.j2
Welcome to {
    
    {
    
     ansible_fqdn }}
This system total mem is : {
    
    {
    
     ansible_memtotal_mb }} MB
This system free mem is: {
    
    {
    
     ansible_memfree_mb }} MB

2) 플레이북 쓰기

[root@node2 workspace]# cat motd.yml
- hosts: all
  tasks:
    - name: Config motd
      template:
        src: ./motd.j2
        dest: /etc/motd

3) 실행 및 보기

[root@node2 workspace]# ansible-playbook motd.yml

PLAY [all] *******************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************
ok: [172.17.0.5]
ok: [172.17.03]
ok: [172.17.0.6]
ok: [172.17.0.4]
ok: [172.17.0.3]
ok: [172.17.06]
ok: [172.17.04]
ok: [172.17.05]

TASK [Config motd] ***********************************************************************************************
changed: [172.17.0.5]
changed: [172.17.0.4]
changed: [172.17.0.3]
changed: [172.17.0.6]
changed: [172.17.03]
changed: [172.17.04]
changed: [172.17.05]
changed: [172.17.06]

PLAY RECAP *******************************************************************************************************
172.17.0.3                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.4                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.5                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.6                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.03                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.04                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.05                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.06                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@node2 workspace]# cat /etc/motd
Welcome to node2
This system total mem is : 12560 MB
This system free mem is: 10638 MB
[root@node2 workspace]#

15.3.2 예제 2

1) 데이터베이스 구성 파일 구성

#正常的配置文件
[root@m01 project]# vim conf/upstream.conf
upstream web {
    
    
    server 172.16.1.7;
    server 172.16.1.8;
}

server {
    
    
    listen 80;
    server_name linux.wp.com;

    location / {
    
    
        proxy_pass http://web;
        proxy_set_header Host $http_host;
    }
}

#不正经的配置文件
[root@m01 project]# vim conf/upstream.j2
upstream {
    
    {
    
     server_name }} {
    
    
{
    
    % for i in range(7,20) %}
    server {
    
    {
    
     net_ip }}.{
    
    {
    
     i }};
{
    
    % endfor %}
}

server {
    
    
    listen {
    
    {
    
     web_port }};
    server_name {
    
    {
    
     server_name }};

    location / {
    
    
        proxy_pass http://{
    
    {
    
     server_name }};
        proxy_set_header Host $http_host;
    }
}

2) 구성 변수 파일

[root@m01 project]# vim upstream_vars.yml
server_name: linux.wp.com
web_port: 80
net_ip: 172.16.1

3) 스크립트 작성

[root@m01 project]# vim lb.yml
- hosts: lb_server
  vars_files: ./upstream_vars.yml
  tasks:
    - name: Config Nginx Upstream
      template:
        src: conf/upstream.j2
        dest: /etc/nginx/conf.d/upstream.conf
      notify: restert_upstream

    - name: Start Nginx Server
      systemd:
        name: nginx
        state: started

  handlers:
    - name: restert_upstream
      systemd:
        name: nginx
        state: restarted

4) 실행 및 테스트

[root@m01 project]# ansible-playbook lb.yml

추천

출처blog.csdn.net/toto1297488504/article/details/132235411