diff options
author | jctanner <tanner.jc@gmail.com> | 2013-12-13 20:25:45 +0100 |
---|---|---|
committer | jctanner <tanner.jc@gmail.com> | 2013-12-13 20:25:45 +0100 |
commit | 91f903eabeddfa19552eb1d1b998297d99627e3d (patch) | |
tree | d2a705e570caf7845cfa06ca70525e8e096c1d85 /library | |
parent | Merge pull request #5131 from janeznemanic/devel (diff) | |
parent | compatible with python 2.4 (diff) | |
download | ansible-91f903eabeddfa19552eb1d1b998297d99627e3d.tar.xz ansible-91f903eabeddfa19552eb1d1b998297d99627e3d.zip |
Merge pull request #4886 from sergeyhush/devel
fix when the system does not have lsb_release script, but has /etc/lsb_release file
Diffstat (limited to 'library')
-rwxr-xr-x | library/system/setup | 71 |
1 files changed, 46 insertions, 25 deletions
diff --git a/library/system/setup b/library/system/setup index 7f902b9f37..939752f145 100755 --- a/library/system/setup +++ b/library/system/setup @@ -51,7 +51,7 @@ options: description: - path used for local ansible facts (*.fact) - files in this dir will be run (if executable) and their results be added to ansible_local facts - if a file is not executable it is read. + if a file is not executable it is read. File/results format can be json or ini-format required: false default: '/etc/ansible/facts.d' @@ -193,7 +193,7 @@ class Facts(object): fact_path = module.params.get('fact_path', None) if not fact_path or not os.path.exists(fact_path): return - + local = {} for fn in sorted(glob.glob(fact_path + '/*.fact')): # where it will sit under local facts @@ -206,7 +206,7 @@ class Facts(object): rc, out, err = module.run_command(fn) else: out = open(fn).read() - + # load raw json fact = 'loading %s' % fact_base try: @@ -232,7 +232,7 @@ class Facts(object): if not local: return self.facts['local'] = local - + # platform.dist() is deprecated in 2.6 # in 2.6 and newer, you should use platform.linux_distribution() def get_distribution_facts(self): @@ -381,28 +381,49 @@ class Facts(object): def get_lsb_facts(self): lsb_path = module.get_bin_path('lsb_release') - if lsb_path is None: - return self.facts - rc, out, err = module.run_command([lsb_path, "-a"]) - if rc == 0: + if lsb_path: + rc, out, err = module.run_command([lsb_path, "-a"]) + if rc == 0: + self.facts['lsb'] = {} + for line in out.split('\n'): + if len(line) < 1: + continue + value = line.split(':', 1)[1].strip() + if 'LSB Version:' in line: + self.facts['lsb']['release'] = value + elif 'Distributor ID:' in line: + self.facts['lsb']['id'] = value + elif 'Description:' in line: + self.facts['lsb']['description'] = value + elif 'Release:' in line: + self.facts['lsb']['release'] = value + elif 'Codename:' in line: + self.facts['lsb']['codename'] = value + if 'lsb' in self.facts and 'release' in self.facts['lsb']: + self.facts['lsb']['major_release'] = self.facts['lsb']['release'].split('.')[0] + elif lsb_path is None and os.path.exists('/etc/lsb-release'): self.facts['lsb'] = {} - for line in out.split('\n'): - if len(line) < 1: - continue - value = line.split(':', 1)[1].strip() - if 'LSB Version:' in line: - self.facts['lsb']['release'] = value - elif 'Distributor ID:' in line: - self.facts['lsb']['id'] = value - elif 'Description:' in line: - self.facts['lsb']['description'] = value - elif 'Release:' in line: - self.facts['lsb']['release'] = value - elif 'Codename:' in line: - self.facts['lsb']['codename'] = value + f = open('/etc/lsb-release', 'r') + try: + for line in f.readlines(): + value = line.split('=',1)[1].strip() + if 'DISTRIB_ID' in line: + self.facts['lsb']['id'] = value + elif 'DISTRIB_RELEASE' in line: + self.facts['lsb']['release'] = value + elif 'DISTRIB_DESCRIPTION' in line: + self.facts['lsb']['description'] = value + elif 'DISTRIB_CODENAME' in line: + self.facts['lsb']['codename'] = value + finally: + f.close() + else: + return self.facts + if 'lsb' in self.facts and 'release' in self.facts['lsb']: self.facts['lsb']['major_release'] = self.facts['lsb']['release'].split('.')[0] + def get_selinux_facts(self): if not HAVE_SELINUX: self.facts['selinux'] = False @@ -1564,15 +1585,15 @@ class LinuxNetwork(Network): ip_path = module.get_bin_path("ip") primary_data = subprocess.Popen( - [ip_path, 'addr', 'show', 'primary', device], + [ip_path, 'addr', 'show', 'primary', device], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] secondary_data = subprocess.Popen( - [ip_path, 'addr', 'show', 'secondary', device], + [ip_path, 'addr', 'show', 'secondary', device], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] parse_ip_output(primary_data) parse_ip_output(secondary_data, secondary=True) - # replace : by _ in interface name since they are hard to use in template + # replace : by _ in interface name since they are hard to use in template new_interfaces = {} for i in interfaces: if ':' in i: |