Интерполяция команды оболочки в командную строку - PullRequest
1 голос
/ 27 сентября 2019

Скажем, у меня есть следующая команда ansible, которая добавляет репозиторий docker в apt

- name: Add Docker Repository
  apt_repository:
    repo: deb https://download.docker.com/linux/ubuntu xenial stable
    state: present

Я бы хотел, чтобы команда автоматически определяла версию, поскольку я не всегда запускаю ее на xenial.Поэтому я попробовал следующее:

- name: Add Docker Repository
  apt_repository:
    repo: deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable
    state: present

Но я получаю ошибку: E:Failed to fetch https://download.docker.com/linux/ubuntu/dists/$(lsb_release/-cs)/binary-amd64/Packages 404 Not Found

Какой правильный способ экранировать $(..), чтобы он правильно оценивался в bash перед командойвыполняется?

1 Ответ

3 голосов
/ 27 сентября 2019

То, что вы могли бы сделать, - это выполнить предыдущую задачу, которая регистрирует выходные данные из "lsb_release -cs" и сохраняет их в переменной:

- name: Register Ubuntu version
  command: lsb_release -cs
  register: your_variable_name

Чтобы получить доступ к значению, просто найдите your_variable_name.stdout,вот так:

- name: Add Docker Repository
  apt_repository:
    repo: deb https://download.docker.com/linux/ubuntu {{ your_variable_name.stdout }} stable
    state: present

Если вы хотите увидеть все подробности об этой переменной:

- name: Inspect variable
  debug:
    var: your_variable_name

Редактировать: Просто остерегайтесь форматирования вашей строки URL, мой ответ простоНапример, вам, возможно, придется урезать некоторые пробелы или добавить «/» для достижения желаемого ^^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...