私は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バージョンが記載されたテキストファイルを出力する必要があります。これについての洞察は高く評価されます。
次の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"
}
構造化された方法で:
---
- 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:
を編集して、任意の変数を使用できます。
いくつかの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"
]
}
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"
- name: obtain OS version
Shell: Redhat-release
register: result
- name: print OS version
debug: var=result.stdout
「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/"