问题

假设我有以下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中正确评估?

  最佳答案

您可以做的是有一个以前的任务,它从“lsb_release -C”注册输出并将其保存在变量中:

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

访问该值只需查找_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字符串上的格式,我的答案只是一个例子,你可能需要修剪一些空格或添加一些“/”来实现你想要的^^

  相同标签的其他问题

ansible