web-dev-qa-db-ja.com

Ansibleプレイブックを作成してリモートホストのOSバージョンを取得する方法

私はansibleが初めてです。 AWSでホストされている450以上のLinuxサーバーのOSバージョンを取得する必要があるという要件があります。 AWSはこの機能を提供していません。人形やシェフから入手することをお勧めします。

動作しない簡単なプレイブックをいくつか作成しました

---
- 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

プレイブックは、ホスト名とOSバージョンが記載されたテキストファイルを出力する必要があります。これについての洞察は高く評価されます。

9
AmigoSe

次のJinja2式のいずれかを使用します。

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

どこ:

  • hostvarsおよびansible_...は組み込みで、Ansibleによって自動的に収集されます
  • ansible_distributionは、Ansibleによって処理されているホストです

たとえば、CentOS 7ディストリビューションを実行しているホストtest_roleに対してAnsibleロールHost.example.comを実行していると仮定します。

---
- 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"
}
10

構造化された方法で:

---
- hosts: all
  vars:
    dest: distro.csv
  tasks:
    - copy:
        content: ''
        dest: "{{ dest }}"
      run_once: yes
      delegate_to: 127.0.0.1
    - lineinfile:
        dest: "{{ dest }}"
        line: '{{ inventory_hostname }},{{ ansible_distribution }},{{ ansible_distribution_major_version }},{{ ansible_distribution_version }},{{ ansible_distribution_release }}'
      delegate_to: 127.0.0.1

Playbookフォルダーにdistro.csvという名前のコンマ区切りファイルを作成します。 line:を編集して、任意の変数を使用できます。

3
user3178743

いくつかのWindowsインスタンスの場合:

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

与える:

ok: [server1] => {
"msg": [
    "ansible_distribution Microsoft Windows Server 2008 R2 Standard ",
    "major version 6",
    "version 6.1.7601.65536"
]

}

ok: [server2] => {
"msg": [
    "ansible_distribution Microsoft Windows Server 2016 Standard",
    "major version 10",
    "version 10.0.14393.0"
]

}

1
Straff

Ansibleは、自動的に利用可能な「hostvars」変数でリモートホストに関する多くの情報をすでに提供しています。

「my_remote_box_name」という名前のホストの情報を表示するには、たとえば、行う

- debug: var=hostvars['my_remote_box_name']

一部のOS情報は

hostvars['my_remote_box_name']['ansible_lsb']

これは、私のubuntuホストの1つに沿っています。

{
  "hostvars['my_remote_box_name']['ansible_lsb']": {
    "codename": "xenial", 
    "description": "Ubuntu 16.04.1 LTS", 
    "id": "Ubuntu", 
    "major_release": "16", 
    "release": "16.04"
}

これらの変数は、「{{variable_name}}」表記を使用して、プレイブックとテンプレートで使用できます。

- debug: msg="My release is {{ansible_lsb.release}}"

出力:

"msg": "My release is 16.04"
1
Matthias Bloch
- name: obtain OS version
  Shell: Redhat-release
  register: result

- name: print OS version
  debug: var=result.stdout
0
MillerGeek

「AWSはこの機能を提供していません」-ファイルを確認できます/etc/os-release awsインスタンスの詳細を取得します。

例えば

[ec2-user@ip-xx-xx-xx ~]$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2016.03"
ID="amzn"
ID_LIKE="rhel Fedora"
VERSION_ID="2016.03"
PRETTY_NAME="Amazon Linux AMI 2016.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:Amazon:linux:2016.03:ga"
HOME_URL="http://aws.Amazon.com/Amazon-linux-AMI/"
0
Vor