Подтвердить что ты не робот

Как я могу писать переменные внутри файла задач в недоступном

У меня есть это play.yml

---
- hosts: 127.0.0.1
  connection: local
  sudo: false

  tasks:
     - include: apache.yml

Мой Apache выглядит так:

vars:
    url: czxcxz

- name: Download apache
  shell: wget {{url}} 

Это дает мне ошибку.

Если я удалю vars, тогда он будет работать. Но я хочу включить вары в задачи, чтобы я мог разделить разные vars для разных задач.

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. Использование set_fact, как описано ниже, устанавливает факт/переменную на удаленные серверы, с которыми выполняется задача. Этот факт/переменная будет сохраняться в последующих задачах на протяжении всей вашей пьесы.

Кроме того, эти факты являются неизменными (на время воспроизведения) и не могут быть изменены после установки.


ОРИГИНАЛЬНЫЙ ОТВЕТ

Используйте set_fact перед вашей задачей, чтобы установить факты, которые кажутся взаимозаменяемыми с переменными:

- name: Set Apache URL
  set_fact:
    apache_url: 'http://example.com/apache'

- name: Download Apache
  shell: wget {{ apache_url }}

См. http://docs.ansible.com/set_fact_module.html для официального слова.

Ответ 2

Переменные определения предназначены для использования в задачах. Но если вы хотите включить их в задачи, вероятно, используйте директиву register. Вот так:

- name: Define variable in task.
  shell: echo "http://www.my.url.com"
  register: url

- name: Download apache
  shell: wget {{ item }}
  with_items: url.stdout

Вы также можете посмотреть roles как способ разделения задач в зависимости от разных ролей roles. Таким образом, вы можете иметь отдельные переменные для каждой из ваших ролей. Например, у вас может быть переменная url для apache1 и отдельная переменная url для роли apache2.

Ответ 4

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

- name: some example
  command: {{ myapp }} -a foo

По умолчанию здесь нужно проанализировать первую часть {{ myapp }} -a foo в качестве словаря вместо строки, и вы получите сообщение об ошибке.

Итак, вы должны процитировать аргумент следующим образом:

- name: some example
  command: "{{ myapp }} -a foo"