如何创建 Ansible playbook 以获取远程主机的操作系统版本?

新手上路,请多包涵

我是ansible的新手。我有一个要求,要求我为 AWS 中托管的 450 多个 linux 服务器提取操作系统版本。 AWS 不提供此功能——而是建议我们从 puppet 或 chef 那里获得它。

我创建了一些无法运行的简单剧本

---
- hosts: testmachine
user: ec2-user
sudo: yes
tasks:
- name: Update all packages to latest
yum: name=* state=latest

task:
- name: obtain OS version
shell: Redhat-release

剧本应该输出一个带有主机名和操作系统版本的文本文件。对此的任何见解都将受到高度赞赏。

原文由 AmigoSe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

使用以下 Jinja2 表达式之一:

 {{ hostvars[inventory_hostname].ansible_distribution }}
{{ hostvars[inventory_hostname].ansible_distribution_major_version }}
{{ hostvars[inventory_hostname].ansible_distribution_version }}

在哪里:

  • hostvarsansible_... 是内置的,由 Ansible 自动收集
  • ansible_distribution 是Ansible正在处理的主机

例如,假设您正在运行 Ansible 角色 test_role 对主机 host.example.com 运行 CentOS 7 发行版:

 ---
- debug:
    msg: "{{ hostvars[inventory_hostname].ansible_distribution }}"
- debug:
    msg: "{{ hostvars[inventory_hostname].ansible_distribution_major_version }}"
- debug:
    msg: "{{ hostvars[inventory_hostname].ansible_distribution_version }}"

会给你:

 TASK [test_role : debug] *******************************************************
ok: [host.example.com] => {
    "msg": "CentOS"
}

TASK [test_role : debug] *******************************************************
ok: [host.example.com] => {
    "msg": "7"
}

TASK [test_role : debug] *******************************************************
ok: [host.example.com] => {
    "msg": "7.5.1804"
}

原文由 Gabriel Petrovay 发布,翻译遵循 CC BY-SA 4.0 许可协议

以结构化的方式:

 - hosts: all
  become: no
  vars:
    output_file: os.csv
  tasks:
    - block:
        # For permisison setup.
        - name: get current user
          command: whoami
          register: whoami
          run_once: yes

        - name: clean file
          copy:
            dest: "{{ output_file }}"
            content: 'hostname,distribution,version,release'
            owner: "{{ whoami.stdout }}"
          run_once: yes

        - name: fill os information
          lineinfile:
            path: "{{ output_file }}"
            line: "{{ ansible_hostname }},\
              {{ ansible_distribution }},\
              {{ ansible_distribution_version }},\
              {{ ansible_distribution_release }}"
          # Tries to prevent concurrent writes.
          throttle: 1
      delegate_to: localhost

在执行文件夹中创建一个名为 os.csv 的逗号分隔文件。您可以使用任何要编辑的变量 line:

原文由 Frock81 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题