将Shell命令内插到ansible命令字符串中

时间:2019-09-26 22:07:32

标签: ansible

说我有以下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 个答案:

答案 0 :(得分:4)

您可以做的是做一个先前的任务,该任务注册“ 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字符串的格式,我的答案只是一个例子,您可能必须修剪一些空格或添加一些“ /”来实现所需的^^