Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
2b9e235f
Commit
2b9e235f
authored
Oct 10, 2014
by
Toshio Kuratomi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rework distribution fact checking to be a little less heinous and add
support for Mandriva. Fixes #9282
parent
d19fe8d9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
35 deletions
+69
-35
lib/ansible/module_utils/facts.py
+69
-35
No files found.
lib/ansible/module_utils/facts.py
View file @
2b9e235f
...
...
@@ -85,16 +85,18 @@ class Facts(object):
_I386RE
=
re
.
compile
(
r'i[3456]86'
)
# For the most part, we assume that platform.dist() will tell the truth.
# This is the fallback to handle unknowns or exceptions
OSDIST_DICT
=
{
'/etc/redhat-release'
:
'RedHat'
,
'/etc/vmware-release'
:
'VMwareESX'
,
'/etc/openwrt_release'
:
'OpenWrt'
,
'/etc/system-release'
:
'OtherLinux'
,
'/etc/alpine-release'
:
'Alpine'
,
'/etc/release'
:
'Solaris'
,
'/etc/arch-release'
:
'Archlinux'
,
'/etc/SuSE-release'
:
'SuSE'
,
'/etc/gentoo-release'
:
'Gentoo'
,
'/etc/os-release'
:
'Debian'
}
OSDIST_LIST
=
(
(
'/etc/redhat-release'
,
'RedHat'
),
(
'/etc/vmware-release'
,
'VMwareESX'
),
(
'/etc/openwrt_release'
,
'OpenWrt'
),
(
'/etc/system-release'
,
'OtherLinux'
),
(
'/etc/alpine-release'
,
'Alpine'
),
(
'/etc/release'
,
'Solaris'
),
(
'/etc/arch-release'
,
'Archlinux'
),
(
'/etc/SuSE-release'
,
'SuSE'
),
(
'/etc/os-release'
,
'SuSE'
),
(
'/etc/gentoo-release'
,
'Gentoo'
),
(
'/etc/os-release'
,
'Debian'
),
(
'/etc/lsb-release'
,
'Mandriva'
)
)
SELINUX_MODE_DICT
=
{
1
:
'enforcing'
,
0
:
'permissive'
,
-
1
:
'disabled'
}
# A list of dicts. If there is a platform with more than one
...
...
@@ -230,6 +232,8 @@ class Facts(object):
FreeBSD
=
'FreeBSD'
,
HPUX
=
'HP-UX'
)
# TODO: Rewrite this to use the function references in a dict pattern
# as it's much cleaner than this massive if-else
if
self
.
facts
[
'system'
]
==
'AIX'
:
self
.
facts
[
'distribution'
]
=
'AIX'
rc
,
out
,
err
=
module
.
run_command
(
"/usr/bin/oslevel"
)
...
...
@@ -268,54 +272,84 @@ class Facts(object):
self
.
facts
[
'distribution_major_version'
]
=
dist
[
1
]
.
split
(
'.'
)[
0
]
or
'NA'
self
.
facts
[
'distribution_release'
]
=
dist
[
2
]
or
'NA'
# Try to handle the exceptions now ...
for
(
path
,
name
)
in
Facts
.
OSDIST_
DICT
.
items
()
:
for
(
path
,
name
)
in
Facts
.
OSDIST_
LIST
:
if
os
.
path
.
exists
(
path
)
and
os
.
path
.
getsize
(
path
)
>
0
:
if
self
.
facts
[
'distribution'
]
==
'Fedora'
:
pass
if
self
.
facts
[
'distribution'
]
in
(
'Fedora'
,
):
# Once we determine the value is one of these distros
# we trust the values are always correct
break
elif
name
==
'RedHat'
:
data
=
get_file_content
(
path
)
if
'Red Hat'
in
data
:
self
.
facts
[
'distribution'
]
=
name
else
:
self
.
facts
[
'distribution'
]
=
data
.
split
()[
0
]
break
elif
name
==
'OtherLinux'
:
data
=
get_file_content
(
path
)
if
'Amazon'
in
data
:
self
.
facts
[
'distribution'
]
=
'Amazon'
self
.
facts
[
'distribution_version'
]
=
data
.
split
()[
-
1
]
break
elif
name
==
'OpenWrt'
:
data
=
get_file_content
(
path
)
if
'OpenWrt'
in
data
:
self
.
facts
[
'distribution'
]
=
name
version
=
re
.
search
(
'DISTRIB_RELEASE="(.*)"'
,
data
)
if
version
:
self
.
facts
[
'distribution_version'
]
=
version
.
groups
()[
0
]
release
=
re
.
search
(
'DISTRIB_CODENAME="(.*)"'
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
version
=
re
.
search
(
'DISTRIB_RELEASE="(.*)"'
,
data
)
if
version
:
self
.
facts
[
'distribution_version'
]
=
version
.
groups
()[
0
]
release
=
re
.
search
(
'DISTRIB_CODENAME="(.*)"'
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
break
elif
name
==
'Alpine'
:
data
=
get_file_content
(
path
)
self
.
facts
[
'distribution'
]
=
'Alpine'
self
.
facts
[
'distribution'
]
=
name
self
.
facts
[
'distribution_version'
]
=
data
break
elif
name
==
'Solaris'
:
data
=
get_file_content
(
path
)
.
split
(
'
\n
'
)[
0
]
ora_prefix
=
''
if
'Oracle Solaris'
in
data
:
data
=
data
.
replace
(
'Oracle '
,
''
)
ora_prefix
=
'Oracle '
self
.
facts
[
'distribution'
]
=
data
.
split
()[
0
]
self
.
facts
[
'distribution_version'
]
=
data
.
split
()[
1
]
self
.
facts
[
'distribution_release'
]
=
ora_prefix
+
data
if
'Solaris'
in
data
:
ora_prefix
=
''
if
'Oracle Solaris'
in
data
:
data
=
data
.
replace
(
'Oracle '
,
''
)
ora_prefix
=
'Oracle '
self
.
facts
[
'distribution'
]
=
data
.
split
()[
0
]
self
.
facts
[
'distribution_version'
]
=
data
.
split
()[
1
]
self
.
facts
[
'distribution_release'
]
=
ora_prefix
+
data
break
elif
name
==
'SuSE'
:
data
=
get_file_content
(
path
)
.
splitlines
()
for
line
in
data
:
if
'='
in
line
:
self
.
facts
[
'distribution_release'
]
=
line
.
split
(
'='
)[
1
]
.
strip
()
data
=
get_file_content
(
path
)
if
'suse'
in
data
.
lower
():
if
path
==
'/etc/os-release'
:
release
=
re
.
search
(
"PRETTY_NAME=[^(]+
\
(?([^)]+?)
\
)"
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
break
elif
path
==
'/etc/SuSE-release'
:
data
=
data
.
splitlines
()
release
=
re
.
search
(
'CODENAME *= *([^
\n
]+)
\n
'
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
.
strip
()
break
elif
name
==
'Debian'
:
data
=
get_file_content
(
path
)
.
split
(
'
\n
'
)[
0
]
release
=
re
.
search
(
"PRETTY_NAME.+
\
(?([^ ]+?)
\
)?
\"
"
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
data
=
get_file_content
(
path
)
if
'Debian'
in
data
:
release
=
re
.
search
(
"PRETTY_NAME=[^(]+
\
(?([^)]+?)
\
)"
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
break
elif
name
==
'Mandriva'
:
data
=
get_file_content
(
path
)
if
'Mandriva'
in
data
:
version
=
re
.
search
(
'DISTRIB_RELEASE="(.*)"'
,
data
)
if
version
:
self
.
facts
[
'distribution_version'
]
=
version
.
groups
()[
0
]
release
=
re
.
search
(
'DISTRIB_CODENAME="(.*)"'
,
data
)
if
release
:
self
.
facts
[
'distribution_release'
]
=
release
.
groups
()[
0
]
self
.
facts
[
'distribution'
]
=
name
break
else
:
self
.
facts
[
'distribution'
]
=
name
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment