Ansible-role-nginx-config: "AnsibleUndefinedVariable: 'http/grpc.j2'의 9행에 μžˆλŠ” 인라인 if-expression이 false둜 ν‰κ°€λ˜κ³  else μ„Ήμ…˜μ΄ μ •μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€."}

에 λ§Œλ“  2021λ…„ 03μ›” 22일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: nginxinc/ansible-role-nginx-config

버그 μ„€λͺ…

http μ„Ήμ…˜μ΄ ν™œμ„±ν™”λœ 경우 ꡬ성을 μ μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

"AnsibleUndefinedVariable: the inline if-expression on line 9 in 'http/grpc.j2' evaluated to false and no else section was defined."}

이 μ˜ˆμ—μ„œ ꡬ성이 λ³΅μ‚¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml

μž¬ν˜„ν•˜λ‹€

λ™μž‘μ„ μž¬ν˜„ν•˜λŠ” 단계:

# https://github.com/nginxinc/ansible-role-nginx
- name: Install NGINX
  include_role:
    name: nginxinc.nginx
  vars:
    nginx_install_from: os_repository
    nginx_start: false
    nginx_type: opensource
    nginx_state: present

# https://github.com/nginxinc/ansible-role-nginx-config
- name: Configure NGINX
  include_role:
    name: nginxinc.nginx_config
  vars:
    nginx_config_start: false
    nginx_config_cleanup: true
    nginx_config_debug_output: true
    nginx_config_debug_tasks: true

    # top level nginx configuration
    nginx_config_main_template_enable: true
    nginx_config_main_template:
      template_file: nginx.conf.j2
      conf_file_name: nginx.conf
      conf_file_location: /etc/nginx/
      worker_connections: 1024
      http_custom_includes:
        - "/etc/nginx/sites-enabled/*.conf"
      user: www-data
      worker_processes: auto
      pid: /var/run/nginx.pid

      # http configuration section
      http_enable: true
      http_settings:
        grpc_global:
          bind:
            address: $remote_addr
            transparent: false
          buffer_size: 4k
          connect_timeout: 60s
[...]

μ˜ˆμƒλ˜λŠ” 행동

ꡬ성이 였λ₯˜ 없이 적용되기λ₯Ό κΈ°λŒ€ν–ˆμŠ΅λ‹ˆλ‹€.

κ·€ν•˜μ˜ ν™˜κ²½:

  • nginxinc.nginx_config, 0.3.3
  • nginxinc.nginx, 0.19.1
  • μ•€μ„œλΈ”: 2.9.6+dfsg-1
  • μš°λΆ„νˆ¬ 20.04

μΆ”κ°€ μ»¨ν…μŠ€νŠΈ

여기에 λ¬Έμ œμ— λŒ€ν•œ λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

λͺ¨λ“  10 λŒ“κΈ€

문제λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. 곧 PR이 올 κ²ƒμž…λ‹ˆλ‹€.

λΉ λ₯Έ 응닡에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 이 λ¬Έμ œμ— λŒ€ν•œ 후속 쑰치λ₯Ό μ·¨ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ©”μΈμ—μ„œ 가져와 μ΅œμ‹  PR이 문제λ₯Ό ν•΄κ²°ν–ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ? 0.3.3 이후 λͺ‡ 가지 μ£Όμš” λ³€κ²½ 사항이 μžˆμœΌλ―€λ‘œ ν…œν”Œλ¦Ώμ„ μΆ”κ°€λ‘œ μ‘°μ •ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμ§€λ§Œ λΆ„μž ν…ŒμŠ€νŠΈμ˜ μ—…λ°μ΄νŠΈλœ μ˜ˆμ œκ°€ 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

ν•  수 μžˆμ§€λ§Œ μ—¬μ „νžˆ λ‹€λ₯Έ ꡬ성 상황을 ν…ŒμŠ€νŠΈν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 방금 gzipμ—μ„œ λΉ„μŠ·ν•œ 상황을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

        gzip:
          enable: true
          buffers:
            number: 32
            size: 4k
          comp_level: 1
          disable:
            - '"msie6"'
          http_version: 1.1
          min_length: 20
          proxied:
            - expired
          types:
            - text/html
          vary: false
fatal: [testing-snap05.snapview.net]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: the inline if-expression on line 27 in 'http/gzip.j2' evaluated to false and no else section was defined."}

"ν”„λ‘μ‹œλœ" 라인과 관련이 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

더 μ΄μƒν•œ 였λ₯˜μž…λ‹ˆλ‹€. μ‚¬μš© 쀑인 Jinja2 버전을 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ? 이전 였λ₯˜μ™€ 이 였λ₯˜μ— λŒ€ν•œ ν…ŒμŠ€νŠΈλŠ” λͺ¨λ‘ 잘 ν†΅κ³Όν–ˆμœΌλ©° 이전 λ²„μ „μ˜ Jinja2λ₯Ό μ‚¬μš©ν•  λ•Œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ ν…œν”Œλ¦Ώμ΄ μ‹€νŒ¨ν•˜λŠ” 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

버전은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

python3-jinja2 2.10.1-2

λ˜ν•œ http_settings μ•„λž˜μ— μžˆλŠ” proxy: μ„Ήμ…˜μ„ μ μš©ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 계속 λ¬΄μ‹œλ˜κ³  nginx.conf에 아무것도 κΈ°λ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

proxy:  # Optional -- Configure Proxy
  buffer_size: 4k  # Optional
  buffering: true  # Optional boolean
  buffers:  # Optional
    number: 8  # Required
    size: 4k  # Required
  busy_buffers_size: 8k  # Optional
  cache: false  # Optional -- Set to 'false' or specify cache zone

Jinja2 2.11.x 둜 μ—…λ°μ΄νŠΈν•˜κ³  였λ₯˜κ°€ ν•΄κ²°λ˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ proxy , μ•„λž˜μ— μ˜€νƒ€κ°€ μžˆμ–΄μš” defaults/main/template.yml . nginx_config_http_template μ•„λž˜μ— ν”„λ‘μ‹œ 세뢀정보λ₯Ό 포함해야 ν•©λ‹ˆλ‹€. μ΅œλŒ€ν•œ 빨리 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ PR을 λ§Œλ“€κ² μŠ΅λ‹ˆλ‹€. μ˜μ‹¬μŠ€λŸ¬μš΄ 경우 λΆ„μž ν…ŒμŠ€νŠΈλŠ” 항상 μ§„μ‹€μ˜ 쒋은 μ†ŒμŠ€μ΄λ©° 항상 μ™„λ²½ν•˜κ²Œ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν”„λ‘μ‹œμ— λŒ€ν•œ λ³„λ„μ˜ 문제λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό μŠ€νŒΈν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ μœ„μ˜ λ¬Έμ œμž…λ‹ˆλ‹€.

http/gzip.j2 와 κ΄€λ ¨ν•˜μ—¬ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. Jinja2==2.11.3 μ—…κ·Έλ ˆμ΄λ“œλ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ 도움이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
이것은 κ΅¬μ„±μž…λ‹ˆλ‹€:

---
nginx_config_main_template:
  http_settings:
    gzip:
      enable: true
      buffers:
        number: 32
        size: 16k
      comp_level: 6
      vary: true
      proxied:
      - any
      types:
      - "*"

였λ₯˜:

    "msg": "AnsibleUndefinedVariable: the inline if-expression on line 27 in 'http/gzip.j2' evaluated to false and no else section was defined.",

27ν–‰μ—λŠ” proxied ν…œν”Œλ¦Ώμ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. https://github.com/nginxinc/ansible-role-nginx-config/blob/main/molecule/default/converge.yml#L62 -L76μ—μ„œ 예제λ₯Ό μ‹€ν–‰ν•˜κ³  μ—¬μ „νžˆ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ? μ΄λŠ” μ—­ν• μ˜ λ¬Έμ œμΈμ§€ λ˜λŠ” μ—¬μ „νžˆ Jinja2 λ¬Έμ œμΈμ§€ ν™•μΈν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€(Jinja2κ°€ μ˜¬λ°”λ₯΄κ²Œ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ•˜μ„ 수 μžˆμŠ΅λ‹ˆκΉŒ?).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰