Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vagrantsetup
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
devbox
vagrantsetup
Commits
a7eb1fad
Commit
a7eb1fad
authored
Sep 05, 2019
by
Reimar Stier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support to install anaconda
parent
cabbba7e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
61 additions
and
23 deletions
+61
-23
main.yml
local_roles/conda_installer/defaults/main.yml
+4
-1
conda_releases.py
local_roles/conda_installer/lookup_plugins/conda_releases.py
+56
-21
conda_releases.pyc
...l_roles/conda_installer/lookup_plugins/conda_releases.pyc
+0
-0
main.yml
local_roles/conda_installer/tasks/main.yml
+1
-1
No files found.
local_roles/conda_installer/defaults/main.yml
View file @
a7eb1fad
---
# defaults file for conda_installer
\ No newline at end of file
# defaults file for conda_installer
conda_installer_version
:
"
latest"
# distribution may be either miniconda or anaconda
conda_installer_distribution
:
"
miniconda"
local_roles/conda_installer/lookup_plugins/conda_releases.py
View file @
a7eb1fad
...
...
@@ -7,15 +7,26 @@ from ansible.module_utils.urls import open_url
from
ansible.plugins.lookup
import
LookupBase
from
bs4
import
BeautifulSoup
URL_ANACONDA
=
"https://repo.anaconda.com/archive/"
URL_MINICONDA
=
"https://repo.continuum.io/miniconda/"
PATTERN_PYTHON
=
re
.
compile
(
r"Miniconda(?P<python>\d+)-(?P<version>[0-9]+.[0-9]+.[0-9]+|latest)-(?P<os>\w+)-(?P<arch>\w+).\w+"
)
MINICONDA
=
"miniconda"
ANACONDA
=
"anaconda"
BASE_URL
=
{
MINICONDA
:
"https://repo.continuum.io/miniconda/"
,
ANACONDA
:
"https://repo.anaconda.com/archive/"
,
}
PATTERN_FILENAME
=
{
MINICONDA
:
re
.
compile
(
r"Miniconda(?P<python>\d+)-(?P<version>[0-9]+.[0-9]+.[0-9]+|latest)-(?P<os>\w+)-(?P<arch>\w+).\w+"
),
ANACONDA
:
re
.
compile
(
r"Anaconda(?P<python>\d+)-(?P<version>[0-9]+.[0-9]+|latest)-(?P<os>\w+)-(?P<arch>\w+).\w+"
),
}
RELEASE_MAX_AGE_DAYS
=
365
def
fetch_miniconda_releases
(
architecture
=
"x86_64"
,
python_version
=
"3"
,
release_max_age_days
=
RELEASE_MAX_AGE_DAYS
):
request
=
open_url
(
url
=
URL_MINICONDA
,
method
=
"GET"
)
def
fetch_releases
(
distribution
=
MINICONDA
,
architecture
=
"x86_64"
,
python_version
=
"3"
,
release_max_age_days
=
RELEASE_MAX_AGE_DAYS
):
base_url
=
BASE_URL
[
distribution
]
request
=
open_url
(
url
=
base_url
,
method
=
"GET"
)
response
=
request
.
read
()
data
=
{}
...
...
@@ -29,37 +40,61 @@ def fetch_miniconda_releases(architecture="x86_64", python_version="3", release_
cols
=
row
.
find_all
(
'td'
)
cols
=
[
ele
.
text
.
strip
()
for
ele
in
cols
]
release
=
{
key
:
value
for
key
,
value
in
zip
(
header
,
cols
)}
result
=
PATTERN_
PYTHON
.
match
(
release
[
"Filename"
])
result
=
PATTERN_
FILENAME
[
distribution
]
.
match
(
release
[
"Filename"
])
if
result
:
timestamp
=
datetime
.
datetime
.
strptime
(
release
[
"Last Modified"
],
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
(
now
-
timestamp
)
.
days
>
release_max_age_days
:
continue
info
=
{
"python"
:
result
.
group
(
"python"
),
"version"
:
result
.
group
(
"version"
),
"os"
:
result
.
group
(
"os"
),
"arch"
:
result
.
group
(
"arch"
),
"download"
:
"{base}{filename}"
.
format
(
base
=
URL_MINICONDA
,
filename
=
release
[
"Filename"
])
"download"
:
"{base}{filename}"
.
format
(
base
=
base_url
,
filename
=
release
[
"Filename"
])
}
release
.
update
(
info
)
timestamp
=
datetime
.
datetime
.
strptime
(
release
[
"Last Modified"
],
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
(
now
-
timestamp
)
.
days
>
release_max_age_days
:
continue
if
release
[
"os"
]
==
"Linux"
and
release
[
'arch'
]
==
architecture
and
release
[
"python"
]
==
python_version
:
if
release
[
"os"
]
==
"Linux"
and
release
[
'arch'
]
==
architecture
and
release
[
"python"
]
==
str
(
python_version
):
data
[
release
[
"version"
]]
=
release
# find actual latest version number
latest_item
=
[
item
for
item
in
data
.
values
()
if
item
[
"version"
]
==
"latest"
]
latest_version
=
[
item
for
item
in
data
.
values
()
if
item
[
"MD5"
]
==
latest_item
[
0
][
"MD5"
]
and
item
[
"version"
]
!=
"latest"
]
latest_version_str
=
latest_version
[
0
][
"version"
]
# update latest version number in map
data
[
"latest"
][
"version"
]
=
latest_version_str
if
len
(
data
)
==
0
:
return
data
# nothing found
# find latest version number
if
distribution
==
MINICONDA
:
latest_item
=
[
item
for
item
in
data
.
values
()
if
item
[
"version"
]
==
"latest"
]
latest_version
=
[
item
for
item
in
data
.
values
()
if
item
[
"MD5"
]
==
latest_item
[
0
][
"MD5"
]
and
item
[
"version"
]
!=
"latest"
]
latest_version_str
=
latest_version
[
0
][
"version"
]
# update latest version number in map
data
[
"latest"
][
"version"
]
=
latest_version_str
elif
distribution
==
ANACONDA
:
sorted_versions
=
sorted
(
data
.
keys
(),
reverse
=
True
)
latest_version
=
sorted_versions
[
0
]
data
[
"latest"
]
=
data
[
latest_version
]
return
data
def
parse_plugin_parameter
(
terms
,
position
,
default
,
allowed_terms
):
result
=
default
if
len
(
terms
)
>
position
and
terms
[
position
]
in
allowed_terms
:
result
=
terms
[
position
]
return
result
class
LookupModule
(
LookupBase
):
def
run
(
self
,
terms
,
variables
=
None
,
**
kwargs
):
return
[
json
.
dumps
(
fetch_miniconda_releases
())]
conda_distribution
=
parse_plugin_parameter
(
terms
,
position
=
0
,
default
=
MINICONDA
,
allowed_terms
=
[
MINICONDA
,
ANACONDA
])
python_version
=
parse_plugin_parameter
(
terms
,
position
=
1
,
default
=
"3"
,
allowed_terms
=
[
"2"
,
"3"
,
2
,
3
])
release_data
=
fetch_releases
(
distribution
=
conda_distribution
,
python_version
=
python_version
)
# if len(release_data) == 0:
# raise AnsibleError("Failed to lookup conda releases for %s" % conda_distribution)
return
[
json
.
dumps
(
release_data
)]
if
__name__
==
'__main__'
:
print
(
json
.
dumps
(
fetch_miniconda_releases
(),
indent
=
4
))
print
(
json
.
dumps
(
fetch_releases
(
distribution
=
MINICONDA
,
python_version
=
"3"
),
indent
=
4
))
print
(
json
.
dumps
(
fetch_releases
(
distribution
=
ANACONDA
,
python_version
=
"2"
),
indent
=
4
))
local_roles/conda_installer/lookup_plugins/conda_releases.pyc
View file @
a7eb1fad
No preview for this file type
local_roles/conda_installer/tasks/main.yml
View file @
a7eb1fad
...
...
@@ -12,7 +12,7 @@
register
:
check_conda
-
name
:
Lookup recent version of conda
set_fact
:
conda_releases
:
"
{{
lookup('conda_releases')
}}"
conda_releases
:
"
{{
lookup('conda_releases'
,
'miniconda'
)
}}"
-
name
:
Show conda releases
debug
:
msg="{{ conda_releases }}"
...
...
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