gremlintv2
@gremlintv2

ANSIBLE Как осуществить проверку существования каталога через when используя словарь переменных?

Привет
У меня проблема с проверкой НЕ существующей папки с использованием словаря в Ansible:
---
- name: "check folder"
  hosts: "myserver"
  gather_facts: yes
  remote_user: root

  vars:
    git_repos:
     repo1:
        git_repo_folder: /var/www/folder1
     repo2:
        git_repo_folder: /var/www/folder2

  tasks:

  - name: "1. Check that the folder exists"
    stat:
      path: "{{ item.value.git_repo_folder }}"
    loop: "{{ lookup('dict', git_repos) }}"
    register: check_folder

  - name: "2. debug"
    debug:
      msg: '{{item.item.item.value.git_repo_folder}} exists'
    with_items: "{{ check_folder.results }}"
    when: not item.stat.exists


Если я пытаюсь запустить playbook, я получаю сообщение об ошибке:
FAILED! => {"failed": true, "msg": "The conditional check 'check_file_id.stat.exists == True' failed. The error was: error while evaluating conditional (check_file_id.stat.exists == True): 'dict' object has no attribute 'stat'\n\n


Попытался отладить:

- debug: var=check_folder:

ok: [myserver] => {
    "check_folder": {
        "changed": false, 
        "msg": "All items completed", 
        "results": [
            {
                "_ansible_ignore_errors": null, 
                "_ansible_item_label": {
                    "key": "repo1", 
                    "value": {
                        "git_repo_folder": "/var/www/folder1"
                    }
                }, 
                "_ansible_item_result": true, 
                "_ansible_no_log": false, 
                "_ansible_parsed": true, 
                "changed": false, 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "checksum_algorithm": "sha1", 
                        "follow": false, 
                        "get_attributes": true, 
                        "get_checksum": true, 
                        "get_md5": null, 
                        "get_mime": true, 
                        "path": "/var/www/folder1"
                    }
                }, 
                "item": {
                    "key": "repo1", 
                    "value": {
                        "git_repo_folder": "/var/www/folder1"
                    }
                }, 
                "stat": {
                    "exists": false
                }
            }, 
            {
                "_ansible_ignore_errors": null, 
                "_ansible_item_label": {
                    "key": "repo2", 
                    "value": {
                        "git_repo_folder": "/var/www/folder2"
                    }
                }, 
                "_ansible_item_result": true, 
                "_ansible_no_log": false, 
                "_ansible_parsed": true, 
                "changed": false, 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "checksum_algorithm": "sha1", 
                        "follow": false, 
                        "get_attributes": true, 
                        "get_checksum": true, 
                        "get_md5": null, 
                        "get_mime": true, 
                        "path": "/var/www/folder2"
                    }
                }, 
                "item": {
                    "key": "repo2", 
                    "value": {
                        "git_repo_folder": "/var/www/folder2"
                    }
                }, 
                "stat": {
                    "exists": false
                }
            }
        ]
    }
}


Где я не прав? Возможно ли использовать not stat.exists со списком переменных?

Спасибо за ответ!

UPD: или подскажите как пропускать(skip) таск если каталог существует, используя dict
  • Вопрос задан
  • 3022 просмотра
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
Про создание переменных отличная Жека в ансибле
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы