Ansible: 'dict object'λŠ” when 절 2.3 RC1에 속성이 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 03μ›” 17일  Β·  2μ½”λ©˜νŠΈ  Β·  좜처: ansible/ansible

문제 μœ ν˜•
  • 버그 μ‹ κ³ 
ꡬ성 μš”μ†Œ 이름

핡심

ANSIBLE 버전
ansible 2.3.0.0 (stable-2.3 923c9ef17c) last updated 2017/03/17 09:12:40 (GMT +1000)
  config file = /apps/dev/playbook/jordan/mr-ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Sep 23 2016, 14:23:49) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
ꡬ성

ν‘œμ€€

OS / ν™˜κ²½

RHEL 6.7

μš”μ•½

이것은 버그가 아닐 μˆ˜λ„ μžˆμ§€λ§Œ 이전 λ²„μ „μ—μ„œλŠ” μ œκ±°ν–ˆμ§€λ§Œ Ansible 2.3 RC1을 μ‚¬μš©ν•˜λ©΄ λͺ¨λ“ˆ (when 절 포함)에 μ˜ν•΄ 등둝 된 λ³€μˆ˜κ°€ μ •μ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•œ λ‹€μŒ ν•˜μœ„ λ”•μ…”λ„ˆλ¦¬ 값을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 2.3μ—μ„œ μ‹€νŒ¨ν•˜κ³  2.2 μ΄ν•˜μ—μ„œλŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€. 이것은 특히 λ³€μˆ˜λ₯Ό λ“±λ‘ν•˜λŠ” λͺ¨λ“ˆμ΄ μ–΄λ–€ 이유둜 λ“  κ±΄λ„ˆ λ›΄ λ‹€μŒ 후속 μž‘μ—…μ΄ λ³€μˆ˜κ°€ μ •μ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œ λ‹€μŒ ν•˜μœ„ ν‚€λ₯Ό κ°€μ Έμ˜¬ λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

μž¬ν˜„ 단계

예제 ν”Œλ ˆμ΄ 뢁

---
- name: test
  hosts: localhost
  connection: local

  tasks:
  - name: module that won't run
    stat:
      path: /apps/tmp
    register: test
    when: False

  - name: debug of var
    debug:
      var: test

  - name: test with conditional
    debug:
      msg: A
    when: test is defined and test.stat.exists
μ˜ˆμƒ κ²°κ³Ό

Ansible 2.2.1.0을 μ‚¬μš©ν•˜λŠ” 경우

ansible 2.2.1.0
  config file = /cygdrive/d/dev/jordan/ansible.cfg
  configured module search path = Default w/o overrides
PLAY [test] ********************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [module that won't run] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:7
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}

TASK [debug of var] ************************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:13
ok: [localhost] => {
    "test": {
        "changed": false,
        "skip_reason": "Conditional check failed",
        "skipped": true
    }
}

TASK [test with conditional] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:17
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
μ‹€μ œ κ²°κ³Ό
-μ‹€μ œλ‘œ 무슨 일이 μžˆμ—ˆλ‚˜μš”? κ°€λŠ₯ν•œ 경우 μΆ”κ°€ μ„ΈλΆ€ 정보 (-vvvv)둜 μ‹€ν–‰

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

TASK [Gathering Facts] *************************************************************************************************************************************************************
Friday 17 March 2017  15:20:42 +1000 (0:00:00.039)       0:00:00.039 **********
ok: [localhost]
META: ran handlers

TASK [module that won't run] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:7
Friday 17 March 2017  15:20:44 +1000 (0:00:01.093)       0:00:01.133 **********
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False", "skipped": true}

TASK [debug of var] ****************************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:13
Friday 17 March 2017  15:20:44 +1000 (0:00:00.012)       0:00:01.145 **********
ok: [localhost] => {
    "changed": false,
    "test": {
        "changed": false,
        "skip_reason": "Conditional result was False",
        "skipped": true
    }
}

TASK [test with conditional] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:17
Friday 17 March 2017  15:20:44 +1000 (0:00:00.034)       0:00:01.180 **********
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check 'test is defined and test.stat.exists' failed. The error was: error while evaluating conditional (test is defined and test.stat.exists): 'dict object' has no attribute 'stat'\n\nThe error appears to have been in '/apps/dev/playbook/jordan/mr-ansible/test.yml': line 17, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: test with conditional\n    ^ here\n"}

PLAY RECAP *************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=1
affects_2.3 bug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

κ°€λŠ₯ν•œ μ˜€ν•΄

μ•ˆλ…•ν•˜μ„Έμš”!

Ansible에 μ œμΆœν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 그것은 μ§„μ‹¬μœΌλ‘œ μš°λ¦¬μ—κ²Œ λ§Žμ€ 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

ν•œ 가지가 λͺ…μ‹œλœ 것과 μ•½κ°„ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— κ·€ν•˜κ°€ 제좜 ν•œ 티켓이 λ‹€μ†Œ μ˜€ν•΄λ˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ•žμœΌλ‘œ 이것은 μ‚¬μš©μž λͺ©λ‘μ— 더 μ ν•©ν•œ μ£Όμ œκ°€ 될 수 있으며, μœ„μ™€ κ΄€λ ¨ν•˜μ—¬ 더 λ§Žμ€ 도움이 ν•„μš”ν•œ 경우 여기에 κ²Œμ‹œ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

'stat'μž‘μ—…μ„ κ±΄λ„ˆ λ›°κΈ° λ•Œλ¬Έμ— μ •μ˜ 된 μ‚¬μ „μœΌλ‘œ test κ°€ ν‘œμ‹œλ˜μ§€λ§Œ stat ν‚€κ°€ μ—†κΈ° λ•Œλ¬Έμ— CORRECT 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 이와 같은 문제λ₯Ό λ°©μ§€ν•˜λ €λ©΄ λ‹€μŒμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

  when: test is defined and 'stat' in test and test.stat.exists

Ansible에 λŒ€ν•œ 관심과 관심에 λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

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

κ°€λŠ₯ν•œ μ˜€ν•΄

μ•ˆλ…•ν•˜μ„Έμš”!

Ansible에 μ œμΆœν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 그것은 μ§„μ‹¬μœΌλ‘œ μš°λ¦¬μ—κ²Œ λ§Žμ€ 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

ν•œ 가지가 λͺ…μ‹œλœ 것과 μ•½κ°„ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— κ·€ν•˜κ°€ 제좜 ν•œ 티켓이 λ‹€μ†Œ μ˜€ν•΄λ˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ•žμœΌλ‘œ 이것은 μ‚¬μš©μž λͺ©λ‘μ— 더 μ ν•©ν•œ μ£Όμ œκ°€ 될 수 있으며, μœ„μ™€ κ΄€λ ¨ν•˜μ—¬ 더 λ§Žμ€ 도움이 ν•„μš”ν•œ 경우 여기에 κ²Œμ‹œ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

'stat'μž‘μ—…μ„ κ±΄λ„ˆ λ›°κΈ° λ•Œλ¬Έμ— μ •μ˜ 된 μ‚¬μ „μœΌλ‘œ test κ°€ ν‘œμ‹œλ˜μ§€λ§Œ stat ν‚€κ°€ μ—†κΈ° λ•Œλ¬Έμ— CORRECT 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 이와 같은 문제λ₯Ό λ°©μ§€ν•˜λ €λ©΄ λ‹€μŒμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

  when: test is defined and 'stat' in test and test.stat.exists

Ansible에 λŒ€ν•œ 관심과 관심에 λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

이 λ™μž‘μ„ λ³€κ²½ ν•œ 컀밋 μ–‘λΆ„ https://github.com/ansible/ansible/commit/81aa12eb1b5a2b50ac9234ca0b05c015af88a845
κ΄€λ ¨ 문제 https://github.com/ansible/ansible/issues/18514

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