2016-08-28 3 views
1

Следующая анзибль сборник пьес для настройки сервера для приложения Laravel работает отлично:Переменная, кажется, не должны быть определены в анзибль PlayBook

--- 
- name: Set up a standard Laravel install 
    hosts: localhost 
    vars_prompt: 
    - name: "domain" 
     prompt: "Domain name" 
     private: no 
    - name: "dbname" 
     prompt: "Database name" 
     private: no 
    - name: "dbuser" 
     prompt: "Database username" 
     private: no 
    - name: "dbpassword" 
     prompt: "Database password" 
     private: yes 
    roles: 
    - create_droplet 
    - create_domain 
- name: Install dependencies 
    hosts: launched 
    roles: 
    - upgrade 
    - utilities 
    - users 
    - nginx-php 
    - composer 
    - nginx_firewall 
    - redis 
    - postgres 
    - git 

Следующая схожий для создания Wordpress установки не:

--- 
- name: Set up Wordpress with Apache, Memcached and Varnish 
    hosts: localhost 
    vars_prompt: 
    - name: "domain" 
     prompt: "Domain name" 
     private: no 
    - name: "title" 
     prompt: "Wordpress title" 
     private: no 
    - name: "email" 
     prompt: "Wordpress email" 
     private: no 
    - name: "user" 
     prompt: "Admin username" 
     private: no 
    - name: "pass" 
     prompt: "Admin password" 
     private: yes 
    roles: 
    - create_droplet 
    - create_domain 
- name: Install dependencies 
    hosts: launched 
    roles: 
    - upgrade 
    - utilities 
    - users 
    - apache 
    - varnish 
    - memcached 
    - mysql 
    - wordpress 

Оба playbooks создал новую капельку на цифровом океане с помощью create_droplet и create_domain роли, и добавить его в launched группы. Однако переменные запрошен во второй сборник пьес, кажется, не быть определена, так как в этом сообщении об ошибке:

TASK [wordpress : Add user "wordpress", belonging to group "wordpress" and having a home dir of /var/www] *** 
fatal: [<IP_ADDRESS_REDACTED>]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'pass' is undefined\n\nThe error appears to have been in '/home/matthew/Projects/ansible-setup/playbooks/roles/wordpress/tasks/main.yml': line 28, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Add user \"wordpress\", belonging to group \"wordpress\" and having a home dir of /var/www\n^here\nWe could be wrong, but this one looks like it might be an issue with\nunbalanced quotes. If starting a value with a quote, make sure the\nline ends with the same set of quotes. For instance this arbitrary\nexample:\n\n foo: \"bad\" \"wolf\"\n\nCould be written as:\n\n foo: '\"bad\" \"wolf\"'\n"} 

Использование отладочных заявлений подтверждает, что ни в одной из ролей, называемых во втором PlayBook делает domain, как представляется, определяется. Я не знаю, почему это так. Однако, если я удалю часть, которая создает капельку и запускает ее против существующей капли, она, похоже, работает нормально.

Может ли кто-нибудь понять, почему это отображается как неопределенное? Это связано с объемом этих переменных?

ответ

4

Это связано с объемом этих переменных?

Да, ваши переменные являются игровыми, поэтому они доступны для первого воспроизведения (где вы их запрашиваете) и недоступны для второго.

Если вам нужна переменная, чтобы выжить между играми, вам необходимо преобразовать ее в факт присутствия.
Например добавить post_tasks к вашей первой игре:

post_tasks: 
    - set_fact: 
     domain: '{{ domain }}' 
    delegate_to: '{{ item }}' 
    delegate_facts: true 
    with_inventory_hostnames: launched 

Это добавит domain факт для каждого хоста в launched группы.

Смежные вопросы