【小内容】判别Amazon Linux版本的Ansible方法-2019年4月更新版-

首先

在Ansible Playbook中,如果存在操作系统/发行版的差异,通常会利用Facts的信息来区分任务。
鉴于Amazon Linux(第一代)和Amazon Linux 2的基础操作系统分别是不同的(似乎分别基于RHEL6和RHEL7),并且还进行了其他重大更改,因此有时候无法使用相同的任务。
以下是判断Amazon Linux(第一代)和Amazon Linux 2的方法总结。

太长看不下去;概括一下

    • 2019/4/27現在、きれいに判別する方法はまだ無さそう

 

    • 「ansible_distribution」と「ansible_service_mgr」で判別するのが一番現実的

 

    「ansible_distribution_major_version」はいずれも「NA」になる

利用环境的方法 (Utilizing the environment methods)

我确认了在VagrantBox中可以使用的内容以及EC2的最新版本。我使用了Ansible的2.7.10版本。

    • ホスト環境

Windows 10 Pro (Disabling Hyper-V)
Oracle VirtualBox 6.0.6 r130049
Vagrant 2.2.4
Ansible 2.7.10

Amazon Linux(初代)

ローカル環境(Vagrant+VirtualBox)

Vagrant Box: mvbcoding/awslinux

Version: v2017.03.0.20170401

AWS EC2環境(ap-northeast-1)

AMI ID: ami-00a5245b4816c38e6
AMI Name: amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2
AMI Description: Amazon Linux AMI 2018.03.0.20181129 x86_64 HVM gp2

Amazon Linux 2

ローカル環境(Vagrant+VirtualBox)

Vagrant box: gbailey/amzn2

Version: v20190314.0.0

AWS EC2環境(ap-northeast-1)

AMI ID: ami-0f9ae750e8274075b
AMI Name: amzn2-ami-hvm-2.0.20190313-x86_64-gp2
AMI Description: Amazon Linux 2 AMI 2.0.20190313 x86_64 HVM gp2

确认每个环境中的/etc/*-release*和Facts。

亚马逊Linux(第一代)本地环境

我使用了下面这个盒子的最新版本,v2017.03.0.20170401。
mvbcoding/awslinux

/etc/os-release, /etc/system-release,/etc/system-release-cpe 的本地化释义如下:
– /etc/os-release:操作系统版本释放信息文件路径。
– /etc/system-release:系统版本信息文件路径。
– /etc/system-release-cpe:系统版本CPE(Common Platform Enumeration)信息文件路径。

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2017.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2017.03"
PRETTY_NAME="Amazon Linux AMI 2017.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2017.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

$ cat /etc/system-release
Amazon Linux AMI release 2017.03
$ cat /etc/system-release-cpe
cpe:/o:amazon:linux:2017.03:ga

Ansible事实

由于篇幅较长,所以只摘录必要的部分。

$ ansible localhost -m setup
localhost | SUCCESS => {
    "ansible_facts": {

※中略

        "ansible_distribution": "Amazon", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/system-release", 
        "ansible_distribution_file_variety": "Amazon", 
        "ansible_distribution_major_version": "NA", 
        "ansible_distribution_release": "NA", 
        "ansible_distribution_version": "2017.03", 

※中略

        "ansible_os_family": "RedHat", 
        "ansible_pkg_mgr": "yum", 

※中略


        "ansible_service_mgr": "upstart", 

※中略
}

亚马逊Linux(第一代)的AWS EC2环境(ap-northeast-1)。

我使用了下面的AMI(ami-00a5245b4816c38e6)。
https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Images:visibility=public-images;imageId=ami-00a5245b4816c38e6;sort=name

/etc/os-release,/etc/system-release,/etc/system-release-cpe 这些文件

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
$ cat /etc/system-release
Amazon Linux AMI release 2018.03
$ cat /etc/system-release-cpe
cpe:/o:amazon:linux:2018.03:ga

Ansible事实

因为篇幅较长,所以只摘录必要的部分。

$ ansible localhost -m setup
localhost | SUCCESS => {
    "ansible_facts": {

※中略

        "ansible_distribution": "Amazon", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/system-release", 
        "ansible_distribution_file_variety": "Amazon", 
        "ansible_distribution_major_version": "NA", 
        "ansible_distribution_release": "NA", 
        "ansible_distribution_version": "2018.03", 

※中略

        "ansible_os_family": "RedHat", 
        "ansible_pkg_mgr": "yum", 

※中略

        "ansible_service_mgr": "upstart", 

※中略
}

亚马逊 Linux 2 本地环境

我使用了下面这个Box的最新版本,v20190314.0.0。
gbailey/amzn2

/etc/os-release文件,/etc/system-release文件,/etc/system-release-cpe文件

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ cat /etc/system-release-cpe
cpe:2.3:o:amazon:amazon_linux:2

Ansible事实

由于输出内容较长,我只选择了必要的部分进行摘录。

$ ansible localhost -m setup
localhost | SUCCESS => {
    "ansible_facts": {

※中略

        "ansible_distribution": "Amazon", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/system-release", 
        "ansible_distribution_file_variety": "Amazon", 
        "ansible_distribution_major_version": "NA", 
        "ansible_distribution_release": "NA", 
        "ansible_distribution_version": "(Karoo)", 

※中略

        "ansible_os_family": "RedHat", 
        "ansible_pkg_mgr": "yum", 

※中略

        "ansible_service_mgr": "systemd", 

※中略
}

Amazon Linux 2是AWS EC2环境的操作系统(位于ap-northeast-1地区)。

我使用的是以下AMI(ami-0f9ae750e8274075b)。
https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Images:visibility=public-images;imageId=ami-0f9ae750e8274075b;sort=name

/etc/os-release, /etc/system-release, /etc/system-release-cpe 这些文件路径是指向操作系统版本信息的。

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ cat /etc/system-release-cpe
cpe:2.3:o:amazon:amazon_linux:2

Ansible 事实

由于文中有很多内容,所以我只选取了必要的部分。

$ ansible localhost -m setup
localhost | SUCCESS => {
    "ansible_facts": {

※中略

        "ansible_distribution": "Amazon", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/system-release", 
        "ansible_distribution_file_variety": "Amazon", 
        "ansible_distribution_major_version": "NA", 
        "ansible_distribution_release": "NA", 
        "ansible_distribution_version": "(Karoo)", 

※中略

        "ansible_os_family": "RedHat", 
        "ansible_pkg_mgr": "yum", 

※中略

        "ansible_service_mgr": "systemd", 

※中略
}

总结

以下是可以用来区分操作系统版本的一些可能的选项,但是很难明确区分Amazon Linux(第一代)和Amazon Linux 2的差异。

    • “ansible_distribution”

 

    • “ansible_distribution_major_version”

 

    • “ansible_distribution_release”

 

    • “ansible_distribution_version”

 

    • “ansible_os_family”

 

    • “ansible_pkg_mgr”

 

    “ansible_service_mgr”

在Ansible的Facts中,”ansible_service_mgr”将分别设置如下。

        "ansible_service_mgr": "upstart", 
        "ansible_service_mgr": "systemd", 

理想的来说,我认为最好在”ansible_distribution_major_version”中指定为”1″或”2″,但似乎并不是这样。
实际情况是,似乎没有除了使用”ansible_service_mgr”之外的其他方法。

相关网站等

以下是关于Amazon Linux 2在2017年首次发布时的文章,但目前情况并未改变。

用Ansible区分Amazon Linux和Amazon Linux 2