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).
This commit is contained in:
parent
ab3a87cc1a
commit
fb255b3607
1 changed files with 22 additions and 38 deletions
|
@ -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):
|
||||
|
@ -96,6 +97,9 @@ class Hostname(object):
|
|||
def __init__(self, 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):
|
||||
|
@ -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,55 +539,36 @@ 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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
class OracleLinuxHostname(Hostname):
|
||||
platform = 'Linux'
|
||||
distribution = 'Oracle linux server'
|
||||
strategy_class = RedHatStrategy
|
||||
|
||||
class AmazonLinuxHostname(Hostname):
|
||||
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue