【小内容】判别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