【问题标题】:store output of command in variable in ansible将命令的输出存储在 ansible 中的变量中
【发布时间】:2020-11-06 20:05:23
【问题描述】:

关于:Ansible-Playbooks

是否可以在远程机器上运行命令并将结果输出存储到变量中? 我正在尝试获取内核版本并安装匹配的头文件,如下所示:

---
- hosts: all

  tasks:
    - name: install headers
      become: yes
      become_method: sudo
      apt:
        name: "{{ packages }}"
      vars:
        packages:
        - linux-headers-`uname -r`
        #- a lot of other packages here

很遗憾uname -r 没有在这里执行。

我知道这个问题:Ansible: Store command's stdout in new variable? 但看起来这是另一个话题。

【问题讨论】:

    标签: variables ansible


    【解决方案1】:

    根据定义:

    Ansible 事实是与您的远程系统相关的数据,包括 操作系统、IP 地址、附加文件系统等。

    在此链接中,您可以查看所有可以使用的 ansible 事实。 https://docs.ansible.com/ansible/latest/user_guide/playbooks_vars_facts.html

    其中一个变量是ansible_kernel,这是您远程系统的内核版本。默认情况下 ansible 获取此变量,但如果您想确保 ansible 将获取此变量,您必须使用 gather_facts: yes

    ---
    - hosts: all
      gather_facts: yes
      tasks:
      - name: install
        become: yes
        become_method: sudo
        apt:
          name: "{{ packages }}"
        vars:
          packages:
          - linux-headers-{{ ansible_kernel }}
    

    【讨论】:

      【解决方案2】:

      我找到了一个解决方案,但我不确定这是否真的很优雅

      ---
      - hosts: all
      
        tasks:
          - name: Getting Kernel Version
            command: "uname -r"
            register: kernel_version
          - name: install
            become: yes
            become_method: sudo
            apt:
              name: "{{ packages }}"
            vars:
              packages:
              - linux-headers-{{ kernel_version.stdout }}
      

      【讨论】:

        猜你喜欢
        • 2016-07-03
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 2022-08-10
        • 1970-01-01
        • 2015-08-07
        • 2012-07-19
        • 2021-10-18
        相关资源
        最近更新 更多