From fb255b3607fa49ab3a78cbbd5a571f7330a31eaf Mon Sep 17 00:00:00 2001 From: Indrajit Raychaudhuri Date: Thu, 11 Aug 2016 10:44:16 -0500 Subject: [PATCH] Improve hostname module to support systemd in more generic way (#4382) Now that there is general purpose `Fact` helper to detect if systemd is active, we would be able to rely on that to apply SystemdStrategy. Detecting presence of systemd at runtime would be more reliable than distribution version based heuristics. (e.g., Debian, Ubuntu allows user to change the default init system, Gentoo allows switching as well, and so on). --- lib/ansible/modules/system/hostname.py | 60 ++++++++++---------------- 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/lib/ansible/modules/system/hostname.py b/lib/ansible/modules/system/hostname.py index f8275874bbd..5e98d5bdb22 100644 --- a/lib/ansible/modules/system/hostname.py +++ b/lib/ansible/modules/system/hostname.py @@ -48,6 +48,7 @@ from distutils.version import LooseVersion # import module snippets from ansible.module_utils.basic import * +from ansible.module_utils.facts import * class UnimplementedStrategy(object): @@ -94,9 +95,12 @@ class Hostname(object): return load_platform_subclass(Hostname, args, kwargs) def __init__(self, module): - self.module = module - self.name = module.params['name'] - self.strategy = self.strategy_class(module) + self.module = module + self.name = module.params['name'] + if self.platform == 'Linux' and Facts(module).is_systemd_managed(): + self.strategy = SystemdStrategy(module) + else: + self.strategy = self.strategy_class(module) def get_current_hostname(self): return self.strategy.get_current_hostname() @@ -512,9 +516,7 @@ class SLESHostname(Hostname): platform = 'Linux' distribution = 'Suse linux enterprise server ' distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("12"): - strategy_class = SystemdStrategy - elif distribution_version and LooseVersion("10") <= LooseVersion(distribution_version) <= LooseVersion("12"): + if distribution_version and LooseVersion("10") <= LooseVersion(distribution_version) <= LooseVersion("12"): strategy_class = SLESStrategy else: strategy_class = UnimplementedStrategy @@ -537,56 +539,37 @@ class RedHat5Hostname(Hostname): class RedHatServerHostname(Hostname): platform = 'Linux' distribution = 'Red hat enterprise linux server' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy class RedHatWorkstationHostname(Hostname): platform = 'Linux' distribution = 'Red hat enterprise linux workstation' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy class CentOSHostname(Hostname): platform = 'Linux' distribution = 'Centos' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy class CentOSLinuxHostname(Hostname): platform = 'Linux' distribution = 'Centos linux' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy class ScientificHostname(Hostname): platform = 'Linux' distribution = 'Scientific' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy class ScientificLinuxHostname(Hostname): platform = 'Linux' distribution = 'Scientific linux' - distribution_version = get_distribution_version() - if distribution_version and LooseVersion(distribution_version) >= LooseVersion("7"): - strategy_class = SystemdStrategy - else: - strategy_class = RedHatStrategy + strategy_class = RedHatStrategy + +class OracleLinuxHostname(Hostname): + platform = 'Linux' + distribution = 'Oracle linux server' + strategy_class = RedHatStrategy class AmazonLinuxHostname(Hostname): platform = 'Linux' @@ -649,7 +632,7 @@ class FreeBSDHostname(Hostname): def main(): module = AnsibleModule( argument_spec = dict( - name=dict(required=True, type='str') + name=dict(required=True) ) ) @@ -673,4 +656,5 @@ def main(): ansible_fqdn=socket.getfqdn(), ansible_domain='.'.join(socket.getfqdn().split('.')[1:]))) -main() +if __name__ == '__main__': + main()