Repository: ansible/ansible

Issue:
ansible_distribution for Arch changed in ansible 2.4
##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
Facts

##### ANSIBLE VERSION
```
ansible 2.4.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ansible/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.13 (default, Jul 21 2017, 03:24:34) [GCC 7.1.1 20170630]
```

##### CONFIGURATION
<!---
ANSIBLE_NOCOWS(/home/ansible/control/ansible.cfg) = True
ANSIBLE_SSH_ARGS(/home/ansible/control/ansible.cfg) = -o PubkeyAuthentication=yes -o ControlMaster=auto -o ControlPersist=7s -C -vvv -o PreferredAuthentications=publickey -o ConnectTimeout=7 -o ControlPath=
ANSIBLE_SSH_CONTROL_PATH(/home/ansible/control/ansible.cfg) = %(directory)s/ansible-ssh-%%h-%%p-%%r
ANSIBLE_SSH_CONTROL_PATH_DIR(/home/ansible/control/ansible.cfg) = $HOME/.ansible/cp
ANSIBLE_SSH_PIPELINING(/home/ansible/control/ansible.cfg) = True
CACHE_PLUGIN(/home/ansible/control/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/home/ansible/control/ansible.cfg) = ~/.ansible/dev_cache
CACHE_PLUGIN_TIMEOUT(/home/ansible/control/ansible.cfg) = 6000
DEFAULT_GATHERING(/home/ansible/control/ansible.cfg) = smart
DEFAULT_HOST_LIST(/home/ansible/control/ansible.cfg) = [u'/home/ansible/control/inventories/development']
DEFAULT_MANAGED_STR(/home/ansible/control/ansible.cfg) = Ansible managed: {file} on {host}
DEFAULT_PRIVATE_KEY_FILE(/home/ansible/control/ansible.cfg) = /home/ansible/control/.private/key.rsa
DEFAULT_PRIVATE_ROLE_VARS(/home/ansible/control/ansible.cfg) = True
DEFAULT_REMOTE_USER(/home/ansible/control/ansible.cfg) = ansible
DEFAULT_ROLES_PATH(/home/ansible/control/ansible.cfg) = [u'/home/ansible/control/roles', u'/home/ansible/control/.roles']
DEFAULT_UNDEFINED_VAR_BEHAVIOR(/home/ansible/control/ansible.cfg) = True
DIFF_ALWAYS(/home/ansible/control/ansible.cfg) = True
DIFF_CONTEXT(/home/ansible/control/ansible.cfg) = 5
DISPLAY_ARGS_TO_STDOUT(/home/ansible/control/ansible.cfg) = True
DISPLAY_SKIPPED_HOSTS(/home/ansible/control/ansible.cfg) = True
HOST_KEY_CHECKING(/home/ansible/control/ansible.cfg) = False
RETRY_FILES_SAVE_PATH(/home/ansible/control/ansible.cfg) = /home/ansible/.ansible/.ansible-retry
-->

##### OS / ENVIRONMENT
On Arch controling Arch

##### SUMMARY
As of Ansible 2.4 (I believe commit 45a9f967749ec68e2077fe1d1d32dd37660ab376) the 
ansible_distribution and ansible_os_family facts changed for Arch Linux breaking multiple modules.

##### STEPS TO REPRODUCE
```
ansible -m setup archhost -i inventories/production |grep arch -i
```

##### EXPECTED RESULTS
```
"ansible_distribution": "Archlinux",
"ansible_os_family": "Archlinux",
```

##### ACTUAL RESULTS
There is now a space and a capital L in the distribution name for Archlinux.
```
"ansible_distribution": "Arch Linux", 
"ansible_os_family": "Arch Linux",
```



Discussion:
What do the other distribution facts end up as?

ansible_distribution
ansible_os_family
ansible_distribution_release
ansible_distribution_version
ansible_distribution_file_parsed
ansible_distribution_file_variety
ansible_distribution_file_path
ansible_major_version

(Or a copy of the entire system facts output from 'ansible $THAT_ARCH_HOST -m set' would also be useful). 
Same problem here:

ansible 2.4.0.0

"ansible_distribution": "Arch Linux", 
"ansible_os_family": "Arch Linux",
"ansible_distribution_release": "NA", 
"ansible_distribution_version": "NA", 
"ansible_distribution_file_parsed": true, 
"ansible_distribution_file_variety": "NA", 
"ansible_distribution_file_path": "/etc/os-release", 
"ansible_distribution_major_version": "NA",
@ykuksenko If you are running ansible from a source checkout, could you also run 'ansible/hacking/tests/gen_distribution_version_testcase.py' on the arch box and include the output?
@shakeme What are the contents of '/etc/os-release' ?
and/or /etc/arch-release?
Content of /etc/os-release is:

NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
ID_LIKE=archlinux
ANSI_COLOR="0;36"
HOME_URL="https://www.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
/etc/arch-release is empty.
Contents of /etc/os-release and the requested variables is the same for me as @shakeme.

This one is the same in checkout and 2.3.2.0:
"ansible_distribution_major_version": "NA",

/tmp/ansible/hacking/tests/gen_distribution_version_testcase.py:
```
{
    "platform.dist": [
        "",
        "",
        ""
    ],
    "input": {
        "/etc/os-release": "NAME=\"Arch Linux\"\nPRETTY_NAME=\"Arch Linux\"\nID=arch\nID_LIKE=archlinux\nANSI_COLOR=\"0;36\"\nHOME_URL=\"https://www.archlinux.org/\"\nSUPPORT_URL=\"https://bbs.archlinux.org/\"\nBUG_REPORT_URL=\"https://bugs.archlinux.org/\"\n\n"
    },
    "name": "Arch Linux NA",
    "result": {
        "distribution_release": "NA",
        "distribution": "Arch Linux",
        "distribution_major_version": "NA",
        "os_family": "Arch Linux",
        "distribution_version": "NA"
    }
}
```
full dump of facts:
ansible -m setup generic
```
generic | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.32.99"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::5054:99ff:fe99:9999"
        ], 
        "ansible_apparmor": {
            "status": "disabled"
        }, 
        "ansible_architecture": "x86_64", 
        "ansible_bios_date": "04/01/2014", 
        "ansible_bios_version": "1.10.2-20170228_101828-anatol", 
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-linux", 
            "quiet": true, 
            "root": "UUID=fae4485b-dac8-4524-8aec-cbd833ffd8f1", 
            "rw": true
        }, 
        "ansible_date_time": {
            "date": "2017-09-20", 
            "day": "20", 
            "epoch": "1505966277", 
            "hour": "22", 
            "iso8601": "2017-09-21T03:57:57Z", 
            "iso8601_basic": "20170920T225757523898", 
            "iso8601_basic_short": "20170920T225757", 
            "iso8601_micro": "2017-09-21T03:57:57.524014Z", 
            "minute": "57", 
            "month": "09", 
            "second": "57", 
            "time": "22:57:57", 
            "tz": "CDT", 
            "tz_offset": "-0500", 
            "weekday": "Wednesday", 
            "weekday_number": "3", 
            "weeknumber": "38", 
            "year": "2017"
        }, 
        "ansible_default_ipv4": {
            "address": "192.168.32.99", 
            "alias": "ens3", 
            "broadcast": "192.168.32.255", 
            "gateway": "192.168.32.254", 
            "interface": "ens3", 
            "macaddress": "52:54:99:99:99:99", 
            "mtu": 1500, 
            "netmask": "255.255.255.0", 
            "network": "192.168.32.0", 
            "type": "ether"
        }, 
        "ansible_default_ipv6": {}, 
        "ansible_device_links": {
            "ids": {
                "sr0": [
                    "ata-QEMU_DVD-ROM_QM00005"
                ]
            }, 
            "labels": {
                "sr0": [
                    "cidata"
                ]
            }, 
            "masters": {}, 
            "uuids": {
                "sr0": [
                    "2017-09-20-22-56-29-37"
                ], 
                "vda2": [
                    "005a0572-7473-42af-ad50-e1633d2c579f"
                ], 
                "vda4": [
                    "fae4485b-dac8-4524-8aec-cbd833ffd8f1"
                ]
            }
        }, 
        "ansible_devices": {
            "sr0": {
                "holders": [], 
                "host": "SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02)", 
                "links": {
                    "ids": [
                        "ata-QEMU_DVD-ROM_QM00005"
                    ], 
                    "labels": [
                        "cidata"
                    ], 
                    "masters": [], 
                    "uuids": [
                        "2017-09-20-22-56-29-37"
                    ]
                }, 
                "model": "QEMU DVD-ROM", 
                "partitions": {}, 
                "removable": "1", 
                "rotational": "1", 
                "sas_address": null, 
                "sas_device_handle": null, 
                "scheduler_mode": "cfq", 
                "sectors": "732", 
                "sectorsize": "2048", 
                "size": "1.43 MB", 
                "support_discard": "0", 
                "vendor": "QEMU", 
                "virtual": 1
            }, 
            "vda": {
                "holders": [], 
                "host": "SCSI storage controller: Red Hat, Inc Virtio block device", 
                "links": {
                    "ids": [], 
                    "labels": [], 
                    "masters": [], 
                    "uuids": []
                }, 
                "model": null, 
                "partitions": {
                    "vda1": {
                        "holders": [], 
                        "links": {
                            "ids": [], 
                            "labels": [], 
                            "masters": [], 
                            "uuids": []
                        }, 
                        "sectors": "2048", 
                        "sectorsize": 512, 
                        "size": "1.00 MB", 
                        "start": "2048", 
                        "uuid": null
                    }, 
                    "vda2": {
                        "holders": [], 
                        "links": {
                            "ids": [], 
                            "labels": [], 
                            "masters": [], 
                            "uuids": [
                                "005a0572-7473-42af-ad50-e1633d2c579f"
                            ]
                        }, 
                        "sectors": "524288", 
                        "sectorsize": 512, 
                        "size": "256.00 MB", 
                        "start": "4096", 
                        "uuid": "005a0572-7473-42af-ad50-e1633d2c579f"
                    }, 
                    "vda3": {
                        "holders": [], 
                        "links": {
                            "ids": [], 
                            "labels": [], 
                            "masters": [], 
                            "uuids": []
                        }, 
                        "sectors": "2097152", 
                        "sectorsize": 512, 
                        "size": "1.00 GB", 
                        "start": "528384", 
                        "uuid": null
                    }, 
                    "vda4": {
                        "holders": [], 
                        "links": {
                            "ids": [], 
                            "labels": [], 
                            "masters": [], 
                            "uuids": [
                                "fae4485b-dac8-4524-8aec-cbd833ffd8f1"
                            ]
                        }, 
                        "sectors": "30928863", 
                        "sectorsize": 512, 
                        "size": "14.75 GB", 
                        "start": "2625536", 
                        "uuid": "fae4485b-dac8-4524-8aec-cbd833ffd8f1"
                    }
                }, 
                "removable": "0", 
                "rotational": "1", 
                "sas_address": null, 
                "sas_device_handle": null, 
                "scheduler_mode": "mq-deadline", 
                "sectors": "33554432", 
                "sectorsize": "512", 
                "size": "16.00 GB", 
                "support_discard": "0", 
                "vendor": "0x1af4", 
                "virtual": 1
            }
        }, 
        "ansible_distribution": "Arch Linux", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/os-release", 
        "ansible_distribution_file_variety": "NA", 
        "ansible_distribution_major_version": "NA", 
        "ansible_distribution_release": "NA", 
        "ansible_distribution_version": "NA", 
        "ansible_dns": {
            "nameservers": [
                "192.168.32.254"
            ], 
            "search": [
                "l.domain.org", 
                "domain.org"
            ]
        }, 
        "ansible_domain": "t.domain.org", 
        "ansible_effective_group_id": 1336, 
        "ansible_effective_user_id": 1336, 
        "ansible_ens3": {
            "active": true, 
            "device": "ens3", 
            "ipv4": {
                "address": "192.168.32.99", 
                "broadcast": "192.168.32.255", 
                "netmask": "255.255.255.0", 
                "network": "192.168.32.0"
            }, 
            "ipv6": [
                {
                    "address": "fe80::5054:99ff:fe99:9999", 
                    "prefix": "64", 
                    "scope": "link"
                }
            ], 
            "macaddress": "52:54:99:99:99:99", 
            "module": "virtio_net", 
            "mtu": 1500, 
            "pciid": "virtio0", 
            "promisc": false, 
            "speed": -1, 
            "type": "ether"
        }, 
        "ansible_env": {
            "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1336/bus", 
            "HOME": "/home/ansibler", 
            "LOGNAME": "ansibler", 
            "MAIL": "/var/spool/mail/ansibler", 
            "PATH": "/usr/bin:/bin:/usr/sbin:/sbin", 
            "PWD": "/home/ansibler", 
            "SHELL": "/bin/bash", 
            "SHLVL": "2", 
            "SSH_CLIENT": "192.168.0.201 50298 22", 
            "SSH_CONNECTION": "192.168.0.201 50298 192.168.32.99 22", 
            "SSH_TTY": "/dev/pts/0", 
            "TERM": "xterm-256color", 
            "USER": "ansibler", 
            "XDG_RUNTIME_DIR": "/run/user/1336", 
            "XDG_SESSION_ID": "c1", 
            "_": "/usr/bin/python"
        }, 
        "ansible_fips": false, 
        "ansible_form_factor": "Other", 
        "ansible_fqdn": "generic.domain.org", 
        "ansible_hostname": "generic", 
        "ansible_interfaces": [
            "lo", 
            "ens3"
        ], 
        "ansible_is_chroot": true, 
        "ansible_kernel": "4.12.13-1-ARCH", 
        "ansible_lo": {
            "active": true, 
            "device": "lo", 
            "ipv4": {
                "address": "127.0.0.1", 
                "broadcast": "host", 
                "netmask": "255.0.0.0", 
                "network": "127.0.0.0"
            }, 
            "ipv6": [
                {
                    "address": "::1", 
                    "prefix": "128", 
                    "scope": "host"
                }
            ], 
            "mtu": 65536, 
            "promisc": false, 
            "type": "loopback"
        }, 
        "ansible_local": {}, 
        "ansible_lsb": {}, 
        "ansible_machine": "x86_64", 
        "ansible_machine_id": "753f214610b04bfba1778d37a1b3c6c1", 
        "ansible_memfree_mb": 320, 
        "ansible_memory_mb": {
            "nocache": {
                "free": 421, 
                "used": 71
            }, 
            "real": {
                "free": 320, 
                "total": 492, 
                "used": 172
            }, 
            "swap": {
                "cached": 0, 
                "free": 0, 
                "total": 0, 
                "used": 0
            }
        }, 
        "ansible_memtotal_mb": 492, 
        "ansible_mounts": [
            {
                "block_available": 3243785, 
                "block_size": 4096, 
                "block_total": 3866107, 
                "block_used": 622322, 
                "device": "/dev/vda4", 
                "fstype": "btrfs", 
                "inode_available": 0, 
                "inode_total": 0, 
                "inode_used": 0, 
                "mount": "/", 
                "options": "rw,relatime,discard,space_cache,subvolid=5,subvol=/", 
                "size_available": 13286543360, 
                "size_total": 15835574272, 
                "uuid": "fae4485b-dac8-4524-8aec-cbd833ffd8f1"
            }, 
            {
                "block_available": 180063, 
                "block_size": 1024, 
                "block_total": 245671, 
                "block_used": 65608, 
                "device": "/dev/vda2", 
                "fstype": "ext4", 
                "inode_available": 65166, 
                "inode_total": 65536, 
                "inode_used": 370, 
                "mount": "/boot", 
                "options": "rw,relatime,data=ordered", 
                "size_available": 184384512, 
                "size_total": 251567104, 
                "uuid": "005a0572-7473-42af-ad50-e1633d2c579f"
            }
        ], 
        "ansible_nodename": "generic.domain.org", 
        "ansible_os_family": "Arch Linux", 
        "ansible_pkg_mgr": "pacman", 
        "ansible_processor": [
            "0", 
            "GenuineIntel", 
            "Westmere E56xx/L56xx/X56xx (Nehalem-C)"
        ], 
        "ansible_processor_cores": 1, 
        "ansible_processor_count": 1, 
        "ansible_processor_threads_per_core": 1, 
        "ansible_processor_vcpus": 1, 
        "ansible_product_name": "Standard PC (i440FX + PIIX, 1996)", 
        "ansible_product_serial": "NA", 
        "ansible_product_uuid": "NA", 
        "ansible_product_version": "pc-i440fx-2.8", 
        "ansible_python": {
            "executable": "/usr/bin/python", 
            "has_sslcontext": true, 
            "type": "cpython", 
            "version": {
                "major": 3, 
                "micro": 2, 
                "minor": 6, 
                "releaselevel": "final", 
                "serial": 0
            }, 
            "version_info": [
                3, 
                6, 
                2, 
                "final", 
                0
            ]
        }, 
        "ansible_python_version": "3.6.2",
        "ansible_real_group_id": 1336,
        "ansible_real_user_id": 1336,
        "ansible_selinux": false,
        "ansible_selinux_python_present": false,
        "ansible_service_mgr": "systemd",
        "ansible_ssh_host_key_dsa_public": "",
        "ansible_ssh_host_key_ecdsa_public": "",
        "ansible_ssh_host_key_ed25519_public": "",
        "ansible_ssh_host_key_rsa_public": "",
        "ansible_swapfree_mb": 0,
        "ansible_swaptotal_mb": 0,
        "ansible_system": "Linux",
        "ansible_system_capabilities": [
            ""
        ],
        "ansible_system_capabilities_enforced": "True",
        "ansible_system_vendor": "QEMU",
        "ansible_uptime_seconds": 70,
        "ansible_user_dir": "/home/ansible",
        "ansible_user_gecos": "",
        "ansible_user_gid": 1336,
        "ansible_user_id": "ansible",
        "ansible_user_shell": "/bin/bash",
        "ansible_user_uid": 1336,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "kvm",
        "gather_subset": [
            "all"
        ],
        "module_setup": true
    },
    "changed": false,
    "failed": false
}
```
Wondering if this is dependent on which order the distribution file based code runs, since it seems to be falling back to using /etc/os-release (where 'Arch Linux' comes from) instead of choosing 'ArchLinux' because it found a (possibly empty) /etc/arch-release. If the os-release runs first and finds something, it wouldn't continue, but need to dig into why/if it could be a different order.
arch-release is probably only populated on older Arch machines, we should support both but os-release will be the one most often populated.
@ykuksenko Thanks for the test data.

Running that test data the chosen name ends up being 'Arch Linux'. 
> Wondering if this is dependent on which order the distribution file based code runs, since it seems to be falling back to using /etc/os-release (where 'Arch Linux' comes from) instead of choosing 'ArchLinux' because it found a (possibly empty) /etc/arch-release. If the os-release runs first and finds something, it wouldn't continue, but need to dig into why/if it could be a different order.

Nope, not that. missing case for breaking on a match with allow_empty, working on pr

Resolving patch:
diff --git a/lib/ansible/module_utils/facts/system/distribution.py b/lib/ansible/module_utils/facts/system/distribution.py
--- a/lib/ansible/module_utils/facts/system/distribution.py
+++ b/lib/ansible/module_utils/facts/system/distribution.py
@@ -64,6 +64,7 @@ class DistributionFiles:
         {'path': '/etc/system-release', 'name': 'Amazon'},
         {'path': '/etc/alpine-release', 'name': 'Alpine'},
         {'path': '/etc/arch-release', 'name': 'Archlinux', 'allowempty': True},
+        {'path': '/etc/os-release', 'name': 'Archlinux'},
         {'path': '/etc/os-release', 'name': 'SUSE'},
         {'path': '/etc/SuSE-release', 'name': 'SUSE'},
         {'path': '/etc/gentoo-release', 'name': 'Gentoo'},
@@ -84,6 +85,13 @@ class DistributionFiles:
         'SMGL': 'Source Mage GNU/Linux',
     }
 
+    # We can't include this in SEARCH_STRING because a name match on its keys
+    # causes a fallback to using the first whitespace seperated item from the file content
+    # as the name. For os-release, that is in form 'NAME=Arch'
+    OS_RELEASE_ALIAS = {
+        'Archlinux': 'Arch Linux'
+    }
+
     def __init__(self, module):
         self.module = module
 
@@ -114,16 +122,19 @@ def _parse_dist_file(self, name, dist_file_content, path, collected_facts):
 
             return True, dist_file_dict
 
+        if name in self.OS_RELEASE_ALIAS:
+            if self.OS_RELEASE_ALIAS[name] in dist_file_content:
+                dist_file_dict['distribution'] = name
+                return True, dist_file_dict
+
         # call a dedicated function for parsing the file content
         # TODO: replace with a map or a class
         try:
             # FIXME: most of these dont actually look at the dist file contents, but random other stuff
             distfunc_name = 'parse_distribution_file_' + name
             # print('distfunc_name: %s' % distfunc_name)
-
             distfunc = getattr(self, distfunc_name)
             # print('distfunc: %s' % distfunc)
-
             parsed, dist_file_dict = distfunc(name, dist_file_content, path, collected_facts)
             return parsed, dist_file_dict
         except AttributeError as exc:
@@ -165,6 +176,12 @@ def process_dist_files(self):
 
             has_dist_file, dist_file_content = self._get_dist_file_content(path, allow_empty=allow_empty)
 
+            # but we allow_empty. For example, ArchLinux with an empty /etc/arch-release and a
+            # /etc/os-release with a different name
+            if has_dist_file and allow_empty:
+                dist_file_facts['distribution'] = name
+                break
+
             if not has_dist_file:
                 # keep looking
                 continue
@@ -180,7 +197,7 @@ def process_dist_files(self):
 
             dist_file_facts['distribution_file_parsed'] = parsed_dist_file
 
-            # finally found the right os dist file and were able to parse it
+            # finally found the right os dit file and were able to parse it
             if parsed_dist_file:
                 dist_file_facts.update(parsed_dist_file_facts)
                 break


Test patch:
diff --git a/test/units/module_utils/test_distribution_version.py b/test/units/module_utils/test_distribution_version.py
--- a/test/units/module_utils/test_distribution_version.py
+++ b/test/units/module_utils/test_distribution_version.py
@@ -815,6 +815,48 @@
             "distribution_version": "NA"
         }
     },
+
+    # ArchLinux with an empty /etc/arch-release and a /etc/os-release with "NAME=Arch Linux"
+    {
+        "platform.dist": [
+            "",
+            "",
+            ""
+        ],
+        "input": {
+            "/etc/os-release": "NAME=\"Arch Linux\"\nPRETTY_NAME=\"Arch Linux\"\nID=arch\nID_LIKE=archlinux\nANSI_COLOR=\"0;36\"\nHOME_URL=\"https://www.archlinux.org/\"\nSUPPORT_URL=\"https://bbs.archlinux.org/\"\nBUG_REPORT_URL=\"https://bugs.archlinux.org/\"\n\n",  # noqa
+            "/etc/arch-release": "",
+        },
+        "name": "Arch Linux NA",
+        "result": {
+            "distribution_release": "NA",
+            "distribution": "Archlinux",
+            "distribution_major_version": "NA",
+            "os_family": "Archlinux",
+            "distribution_version": "NA"
+        }
+    },
+
+    # ArchLinux with no /etc/arch-release but with a /etc/os-release with NAME=Arch Linux
+    # The fact needs to map 'Arch Linux' to 'Archlinux' for compat with 2.3 and earlier facts
+    {
+        "platform.dist": [
+            "",
+            "",
+            ""
+        ],
+        "input": {
+            "/etc/os-release": "NAME=\"Arch Linux\"\nPRETTY_NAME=\"Arch Linux\"\nID=arch\nID_LIKE=archlinux\nANSI_COLOR=\"0;36\"\nHOME_URL=\"https://www.archlinux.org/\"\nSUPPORT_URL=\"https://bbs.archlinux.org/\"\nBUG_REPORT_URL=\"https://bugs.archlinux.org/\"\n\n",  # noqa
+        },
+        "name": "Arch Linux no arch-release NA",
+        "result": {
+            "distribution_release": "NA",
+            "distribution": "Archlinux",
+            "distribution_major_version": "NA",
+            "os_family": "Archlinux",
+            "distribution_version": "NA"
+        }
+    }
 ]