diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 156aa480a07..8d1b62af755 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -129,6 +129,8 @@ def get_distribution(): if platform.system() == 'Linux': try: distribution = platform.linux_distribution()[0].capitalize() + if " " in distribution: + distribution = distribution.split()[0] if not distribution and os.path.isfile('/etc/system-release'): distribution = platform.linux_distribution(supported_dists=['system'])[0].capitalize() if 'Amazon' in distribution: @@ -142,6 +144,18 @@ def get_distribution(): distribution = None return distribution +def get_distribution_version(): + ''' return the distribution version ''' + if platform.system() == 'Linux': + try: + distribution_version = platform.linux_distribution()[1] + except: + # FIXME: MethodMissing, I assume? + distribution_version = platform.dist()[1] + else: + distribution_version = None + return distribution_version + def load_platform_subclass(cls, *args, **kwargs): ''' used by modules like User to have different implementations based on detected platform. See User diff --git a/library/system/hostname b/library/system/hostname old mode 100644 new mode 100755 index 61bdf985b99..775b47a1ff9 --- a/library/system/hostname +++ b/library/system/hostname @@ -39,6 +39,10 @@ EXAMPLES = ''' - hostname: name=web01 ''' +# import module snippets +from ansible.module_utils.basic import * + + class UnimplementedStrategy(object): def __init__(self, module): self.module = module @@ -135,6 +139,7 @@ class GenericStrategy(object): def set_permanent_hostname(self, name): pass + # =========================================== class DebianStrategy(GenericStrategy): @@ -173,20 +178,6 @@ class DebianStrategy(GenericStrategy): self.module.fail_json(msg="failed to update hostname: %s" % str(err)) -class DebianHostname(Hostname): - platform = 'Linux' - distribution = 'Debian' - strategy_class = DebianStrategy - -class UbuntuHostname(Hostname): - platform = 'Linux' - distribution = 'Ubuntu' - strategy_class = DebianStrategy - -class LinaroHostname(Hostname): - platform = 'Linux' - distribution = 'Linaro' - strategy_class = DebianStrategy # =========================================== @@ -236,35 +227,6 @@ class RedHatStrategy(GenericStrategy): self.module.fail_json(msg="failed to update hostname: %s" % str(err)) -class RedHat5Hostname(Hostname): - platform = 'Linux' - distribution = 'Redhat' - strategy_class = RedHatStrategy - -class RedHatServerHostname(Hostname): - platform = 'Linux' - distribution = 'Red hat enterprise linux server' - strategy_class = RedHatStrategy - -class RedHatWorkstationHostname(Hostname): - platform = 'Linux' - distribution = 'Red hat enterprise linux workstation' - strategy_class = RedHatStrategy - -class CentOSHostname(Hostname): - platform = 'Linux' - distribution = 'Centos' - strategy_class = RedHatStrategy - -class AmazonLinuxHostname(Hostname): - platform = 'Linux' - distribution = 'Amazon' - strategy_class = RedHatStrategy - -class ScientificLinuxHostname(Hostname): - platform = 'Linux' - distribution = 'Scientific' - strategy_class = RedHatStrategy # =========================================== @@ -309,6 +271,9 @@ class FedoraStrategy(GenericStrategy): self.module.fail_json(msg="Command failed rc=%d, out=%s, err=%s" % (rc, out, err)) + +# =========================================== + class FedoraHostname(Hostname): platform = 'Linux' distribution = 'Fedora' @@ -324,6 +289,63 @@ class ArchHostname(Hostname): distribution = 'Arch' strategy_class = FedoraStrategy +class RedHat5Hostname(Hostname): + platform = 'Linux' + distribution = 'Redhat' + strategy_class = RedHatStrategy + +class RedHatServerHostname(Hostname): + platform = 'Linux' + distribution = 'Red hat enterprise linux server' + if float(get_distribution_version()) >= 7: + strategy_class = FedoraStrategy + else: + strategy_class = RedHatStrategy + +class RedHatWorkstationHostname(Hostname): + platform = 'Linux' + distribution = 'Red hat enterprise linux workstation' + if float(get_distribution_version()) >= 7: + strategy_class = FedoraStrategy + else: + strategy_class = RedHatStrategy + +class CentOSHostname(Hostname): + platform = 'Linux' + distribution = 'Centos' + if float(get_distribution_version()) >= 7: + strategy_class = FedoraStrategy + else: + strategy_class = RedHatStrategy + +class ScientificLinuxHostname(Hostname): + platform = 'Linux' + distribution = 'Scientific' + if float(get_distribution_version()) >= 7: + strategy_class = FedoraStrategy + else: + strategy_class = RedHatStrategy + +class AmazonLinuxHostname(Hostname): + platform = 'Linux' + distribution = 'Amazon' + strategy_class = RedHatStrategy + +class DebianHostname(Hostname): + platform = 'Linux' + distribution = 'Debian' + strategy_class = DebianStrategy + +class UbuntuHostname(Hostname): + platform = 'Linux' + distribution = 'Ubuntu' + strategy_class = DebianStrategy + +class LinaroHostname(Hostname): + platform = 'Linux' + distribution = 'Linaro' + strategy_class = DebianStrategy + # =========================================== def main(): @@ -349,6 +371,4 @@ def main(): module.exit_json(changed=changed, name=name) -# import module snippets -from ansible.module_utils.basic import * main()