moved from ubuntu to alpine linux
This commit is contained in:
parent
858e739f70
commit
33fdbbad20
2
Makefile
2
Makefile
@ -1,4 +1,4 @@
|
|||||||
PY?=~/miniconda3/bin/python
|
PY?=/usr/bin/python3
|
||||||
PELICAN?=pelican
|
PELICAN?=pelican
|
||||||
PELICANOPTS=
|
PELICANOPTS=
|
||||||
|
|
||||||
|
1577
_nb_header.html
1577
_nb_header.html
File diff suppressed because one or more lines are too long
@ -1,278 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
DOCUMENTATION = """
|
|
||||||
---
|
|
||||||
module: conda
|
|
||||||
short_description: Manage Python libraries via conda
|
|
||||||
description:
|
|
||||||
>
|
|
||||||
Manage Python libraries via conda.
|
|
||||||
Can install, update, and remove packages.
|
|
||||||
author: Synthicity
|
|
||||||
notes:
|
|
||||||
>
|
|
||||||
Requires conda to already be installed.
|
|
||||||
Will look under the home directory for a conda executable.
|
|
||||||
options:
|
|
||||||
name:
|
|
||||||
description: The name of a Python library to install
|
|
||||||
required: true
|
|
||||||
default: null
|
|
||||||
version:
|
|
||||||
description: A specific version of a library to install
|
|
||||||
required: false
|
|
||||||
default: null
|
|
||||||
state:
|
|
||||||
description: State in which to leave the Python package
|
|
||||||
required: false
|
|
||||||
default: present
|
|
||||||
choices: [ "present", "absent", "latest" ]
|
|
||||||
channels:
|
|
||||||
description: Extra channels to use when installing packages
|
|
||||||
required: false
|
|
||||||
default: null
|
|
||||||
executable:
|
|
||||||
description: Full path to the conda executable
|
|
||||||
required: false
|
|
||||||
default: null
|
|
||||||
extra_args:
|
|
||||||
description: Extra arguments passed to conda
|
|
||||||
required: false
|
|
||||||
default: null
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: install numpy via conda
|
|
||||||
conda: name=numpy state=latest
|
|
||||||
|
|
||||||
- name: install scipy 0.14 via conda
|
|
||||||
conda: name=scipy version="0.14"
|
|
||||||
|
|
||||||
- name: remove matplotlib from conda
|
|
||||||
conda: name=matplotlib state=absent
|
|
||||||
"""
|
|
||||||
|
|
||||||
from distutils.spawn import find_executable
|
|
||||||
import os.path
|
|
||||||
|
|
||||||
|
|
||||||
def _find_conda(module, executable):
|
|
||||||
"""
|
|
||||||
If `executable` is not None, checks whether it points to a valid file
|
|
||||||
and returns it if this is the case. Otherwise tries to find the `conda`
|
|
||||||
executable in the path. Calls `fail_json` if either of these fail.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not executable:
|
|
||||||
conda = find_executable('conda')
|
|
||||||
if conda:
|
|
||||||
return conda
|
|
||||||
else:
|
|
||||||
if os.path.isfile(executable):
|
|
||||||
return executable
|
|
||||||
|
|
||||||
module.fail_json(msg="could not find conda executable")
|
|
||||||
|
|
||||||
|
|
||||||
def _add_channels_to_command(command, channels):
|
|
||||||
"""
|
|
||||||
Add extra channels to a conda command by splitting the channels
|
|
||||||
and putting "--channel" before each one.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if channels:
|
|
||||||
channels = channels.strip().split()
|
|
||||||
dashc = []
|
|
||||||
for channel in channels:
|
|
||||||
dashc.append('--channel')
|
|
||||||
dashc.append(channel)
|
|
||||||
|
|
||||||
return command[:2] + dashc + command[2:]
|
|
||||||
else:
|
|
||||||
return command
|
|
||||||
|
|
||||||
|
|
||||||
def _add_extras_to_command(command, extras):
|
|
||||||
"""
|
|
||||||
Add extra arguments to a conda command by splitting the arguments
|
|
||||||
on white space and inserting them after the second item in the command.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if extras:
|
|
||||||
extras = extras.strip().split()
|
|
||||||
return command[:2] + extras + command[2:]
|
|
||||||
else:
|
|
||||||
return command
|
|
||||||
|
|
||||||
|
|
||||||
def _check_installed(module, conda, name):
|
|
||||||
"""
|
|
||||||
Check whether a package is installed. Returns (bool, version_str).
|
|
||||||
|
|
||||||
"""
|
|
||||||
command = [
|
|
||||||
conda,
|
|
||||||
'list',
|
|
||||||
'^' + name + '$' # use regex to get an exact match
|
|
||||||
]
|
|
||||||
command = _add_extras_to_command(command, module.params['extra_args'])
|
|
||||||
|
|
||||||
rc, stdout, stderr = module.run_command(command)
|
|
||||||
|
|
||||||
if rc != 0:
|
|
||||||
return False, None
|
|
||||||
|
|
||||||
version = stdout.strip().split()[-2]
|
|
||||||
|
|
||||||
return True, version
|
|
||||||
|
|
||||||
|
|
||||||
def _remove_package(module, conda, installed, name):
|
|
||||||
"""
|
|
||||||
Use conda to remove a given package if it is installed.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if module.check_mode and installed:
|
|
||||||
module.exit_json(changed=True)
|
|
||||||
|
|
||||||
if not installed:
|
|
||||||
module.exit_json(changed=False)
|
|
||||||
|
|
||||||
command = [
|
|
||||||
conda,
|
|
||||||
'remove',
|
|
||||||
'--yes',
|
|
||||||
name
|
|
||||||
]
|
|
||||||
command = _add_extras_to_command(command, module.params['extra_args'])
|
|
||||||
|
|
||||||
rc, stdout, stderr = module.run_command(command)
|
|
||||||
|
|
||||||
if rc != 0:
|
|
||||||
module.fail_json(msg='failed to remove package ' + name)
|
|
||||||
|
|
||||||
module.exit_json(changed=True, name=name, stdout=stdout, stderr=stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def _install_package(
|
|
||||||
module, conda, installed, name, version, installed_version):
|
|
||||||
"""
|
|
||||||
Install a package at a specific version, or install a missing package at
|
|
||||||
the latest version if no version is specified.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if installed and (version is None or installed_version == version):
|
|
||||||
module.exit_json(changed=False, name=name, version=version)
|
|
||||||
|
|
||||||
if module.check_mode:
|
|
||||||
if not installed or (installed and installed_version != version):
|
|
||||||
module.exit_json(changed=True)
|
|
||||||
|
|
||||||
if version:
|
|
||||||
install_str = name + '=' + version
|
|
||||||
else:
|
|
||||||
install_str = name
|
|
||||||
|
|
||||||
command = [
|
|
||||||
conda,
|
|
||||||
'install',
|
|
||||||
'--yes',
|
|
||||||
install_str
|
|
||||||
]
|
|
||||||
command = _add_channels_to_command(command, module.params['channels'])
|
|
||||||
command = _add_extras_to_command(command, module.params['extra_args'])
|
|
||||||
|
|
||||||
rc, stdout, stderr = module.run_command(command)
|
|
||||||
|
|
||||||
if rc != 0:
|
|
||||||
module.fail_json(msg='failed to install package ' + name)
|
|
||||||
|
|
||||||
module.exit_json(
|
|
||||||
changed=True, name=name, version=version, stdout=stdout, stderr=stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def _update_package(module, conda, installed, name):
|
|
||||||
"""
|
|
||||||
Make sure an installed package is at its latest version.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not installed:
|
|
||||||
module.fail_json(msg='can\'t update a package that is not installed')
|
|
||||||
|
|
||||||
# see if it's already installed at the latest version
|
|
||||||
command = [
|
|
||||||
conda,
|
|
||||||
'update',
|
|
||||||
'--dry-run',
|
|
||||||
name
|
|
||||||
]
|
|
||||||
command = _add_channels_to_command(command, module.params['channels'])
|
|
||||||
command = _add_extras_to_command(command, module.params['extra_args'])
|
|
||||||
|
|
||||||
rc, stdout, stderr = module.run_command(command)
|
|
||||||
|
|
||||||
if rc != 0:
|
|
||||||
module.fail_json(msg='can\'t update a package that is not installed')
|
|
||||||
|
|
||||||
if 'requested packages already installed' in stdout:
|
|
||||||
module.exit_json(changed=False, name=name)
|
|
||||||
|
|
||||||
# now we're definitely gonna update the package
|
|
||||||
if module.check_mode:
|
|
||||||
module.exit_json(changed=True, name=name)
|
|
||||||
|
|
||||||
command = [
|
|
||||||
conda,
|
|
||||||
'update',
|
|
||||||
'--yes',
|
|
||||||
name
|
|
||||||
]
|
|
||||||
command = _add_channels_to_command(command, module.params['channels'])
|
|
||||||
command = _add_extras_to_command(command, module.params['extra_args'])
|
|
||||||
|
|
||||||
rc, stdout, stderr = module.run_command(command)
|
|
||||||
|
|
||||||
if rc != 0:
|
|
||||||
module.fail_json(msg='failed to update package ' + name)
|
|
||||||
|
|
||||||
module.exit_json(changed=True, name=name, stdout=stdout, stderr=stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = AnsibleModule(
|
|
||||||
argument_spec={
|
|
||||||
'name': {'required': True, 'type': 'str'},
|
|
||||||
'version': {'default': None, 'required': False, 'type': 'str'},
|
|
||||||
'state': {
|
|
||||||
'default': 'present',
|
|
||||||
'required': False,
|
|
||||||
'choices': ['present', 'absent', 'latest']
|
|
||||||
},
|
|
||||||
'channels': {'default': None, 'required': False},
|
|
||||||
'executable': {'default': None, 'required': False},
|
|
||||||
'extra_args': {'default': None, 'required': False, 'type': 'str'}
|
|
||||||
},
|
|
||||||
supports_check_mode=True)
|
|
||||||
|
|
||||||
conda = _find_conda(module, module.params['executable'])
|
|
||||||
name = module.params['name']
|
|
||||||
state = module.params['state']
|
|
||||||
version = module.params['version']
|
|
||||||
|
|
||||||
installed, installed_version = _check_installed(module, conda, name)
|
|
||||||
|
|
||||||
if state == 'absent':
|
|
||||||
_remove_package(module, conda, installed, name)
|
|
||||||
elif state == 'present' or (state == 'latest' and not installed):
|
|
||||||
_install_package(
|
|
||||||
module, conda, installed, name, version, installed_version)
|
|
||||||
elif state == 'latest':
|
|
||||||
_update_package(module, conda, installed, name)
|
|
||||||
|
|
||||||
|
|
||||||
# import module snippets
|
|
||||||
from ansible.module_utils.basic import *
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
- name: download miniconda
|
|
||||||
get_url:
|
|
||||||
url: https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
|
|
||||||
dest: /tmp/miniconda.sh
|
|
||||||
mode: 0755
|
|
||||||
|
|
||||||
- name: install miniconda
|
|
||||||
command: bash /tmp/miniconda.sh -b -f
|
|
||||||
args:
|
|
||||||
creates: ~/miniconda3/bin/conda
|
|
||||||
become: no
|
|
@ -1,44 +1,53 @@
|
|||||||
---
|
---
|
||||||
- hosts: all
|
- hosts: all
|
||||||
|
|
||||||
roles:
|
|
||||||
- miniconda
|
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
|
|
||||||
- name: install deps
|
- name: install deps
|
||||||
apt:
|
apk:
|
||||||
name={{ item }}
|
name={{ item }}
|
||||||
state=present
|
state=present
|
||||||
|
update_cache=yes
|
||||||
with_items:
|
with_items:
|
||||||
|
- ack
|
||||||
|
- build-base
|
||||||
|
- curl
|
||||||
- git
|
- git
|
||||||
- lftp
|
- gcc
|
||||||
- pandoc
|
|
||||||
- nodejs
|
|
||||||
- nodejs-legacy
|
|
||||||
- npm
|
|
||||||
- mc
|
|
||||||
- imagemagick
|
- imagemagick
|
||||||
- ack-grep
|
- libstdc++
|
||||||
|
- lftp
|
||||||
|
- make
|
||||||
|
- musl-dev
|
||||||
|
- nodejs
|
||||||
|
- perl
|
||||||
|
- python3
|
||||||
|
- python3-dev
|
||||||
|
- python-dev
|
||||||
become: yes
|
become: yes
|
||||||
|
|
||||||
- name: install conda packages
|
- name: pip status
|
||||||
conda:
|
stat:
|
||||||
name={{ item }}
|
path=/usr/bin/pip
|
||||||
executable=/home/vagrant/miniconda3/bin/conda
|
register: pip
|
||||||
with_items:
|
|
||||||
- jupyter=1.0.0
|
|
||||||
|
|
||||||
- name: install blogging packages
|
- name: install pip
|
||||||
|
shell: curl https://bootstrap.pypa.io/get-pip.py | python3
|
||||||
|
become: yes
|
||||||
|
when: pip.stat.exists == False
|
||||||
|
|
||||||
|
- name: install pip packages
|
||||||
pip:
|
pip:
|
||||||
name={{ item }}
|
name={{ item }}
|
||||||
executable=/home/vagrant/miniconda3/bin/pip
|
|
||||||
with_items:
|
with_items:
|
||||||
- pelican==3.6.3
|
|
||||||
- markdown
|
|
||||||
- beautifulsoup4
|
- beautifulsoup4
|
||||||
- cookiecutter==1.2.1
|
- cookiecutter==1.2.1
|
||||||
|
- ipython[notebook]==2.4.1
|
||||||
|
- markdown
|
||||||
|
- pelican==3.6.3
|
||||||
- tzlocal
|
- tzlocal
|
||||||
|
- virtualenv
|
||||||
|
become: yes
|
||||||
|
|
||||||
- name: clone pelican-plugins
|
- name: clone pelican-plugins
|
||||||
git:
|
git:
|
||||||
@ -67,18 +76,13 @@
|
|||||||
mode=0644
|
mode=0644
|
||||||
backup=yes
|
backup=yes
|
||||||
become: yes
|
become: yes
|
||||||
notify:
|
|
||||||
- update timezone
|
|
||||||
|
|
||||||
- name: create ansible environment
|
|
||||||
command: /home/vagrant/miniconda3/bin/conda create -n ansible python=2.7 --yes
|
|
||||||
args:
|
|
||||||
creates: /home/vagrant/miniconda3/envs/ansible
|
|
||||||
|
|
||||||
- name: install ansible
|
- name: install ansible
|
||||||
pip:
|
pip:
|
||||||
name=ansible
|
name=ansible
|
||||||
executable=/home/vagrant/miniconda3/envs/ansible/bin/pip
|
virtualenv=~/ansible
|
||||||
|
virtualenv_python=python
|
||||||
|
state=latest
|
||||||
|
|
||||||
- name: clone batcave
|
- name: clone batcave
|
||||||
git:
|
git:
|
||||||
@ -87,20 +91,32 @@
|
|||||||
|
|
||||||
- name: run batcave
|
- name: run batcave
|
||||||
command:
|
command:
|
||||||
/home/vagrant/miniconda3/envs/ansible/bin/ansible-playbook -i hosts base.yml -c local
|
~/ansible/bin/ansible-playbook -i hosts base.yml -c local
|
||||||
chdir=~/batcave
|
chdir=~/batcave
|
||||||
|
|
||||||
- name: export variables
|
- name: export variables
|
||||||
lineinfile:
|
lineinfile:
|
||||||
dest=~/.zshrc
|
dest=~/.zshrc
|
||||||
line="{{ item }}"
|
line='{{ item }}'
|
||||||
with_items:
|
with_items:
|
||||||
- export PYTHONIOENCODING=UTF-8
|
- export PYTHONIOENCODING=UTF-8
|
||||||
- export LC_ALL=C.UTF-8
|
- export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
handlers:
|
- name: no git colors
|
||||||
|
command: git config --global color.ui false
|
||||||
|
|
||||||
- name: update timezone
|
- name: remove some deps
|
||||||
command:
|
apk:
|
||||||
dpkg-reconfigure --frontend moninteractive tzdata
|
name={{ item }}
|
||||||
|
state=absent
|
||||||
|
with_items:
|
||||||
|
- build-base
|
||||||
|
- python3-dev
|
||||||
|
- python-dev
|
||||||
|
become: yes
|
||||||
|
|
||||||
|
- name: install make
|
||||||
|
apk:
|
||||||
|
name=make
|
||||||
|
state=present
|
||||||
become: yes
|
become: yes
|
||||||
|
@ -1,28 +1,25 @@
|
|||||||
FROM ubuntu:14.04
|
FROM alpine:3.3
|
||||||
|
|
||||||
RUN locale-gen en_US.UTF-8
|
RUN apk add --update \
|
||||||
ENV LANG en_US.UTF-8
|
bash \
|
||||||
ENV LANGUAGE en_US:en
|
openssh \
|
||||||
ENV LC_ALL en_US.UTF-8
|
python \
|
||||||
|
sudo \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
RUN apt-get update \
|
# create ssh keys
|
||||||
&& apt-get install -y \
|
RUN ssh-keygen -A
|
||||||
openssh-server \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN mkdir -p /var/run/sshd \
|
# add vagrant user
|
||||||
&& chmod 0755 /var/run/sshd
|
RUN adduser -h /home/vagrant -s /bin/sh -D vagrant
|
||||||
|
|
||||||
# Create and configure vagrant user
|
# configure SSH access
|
||||||
RUN useradd --create-home -s /bin/bash vagrant
|
|
||||||
|
|
||||||
# Configure SSH access
|
|
||||||
RUN mkdir -p /home/vagrant/.ssh \
|
RUN mkdir -p /home/vagrant/.ssh \
|
||||||
&& echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys \
|
&& echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys \
|
||||||
&& chown -R vagrant: /home/vagrant/.ssh \
|
&& chown -R vagrant: /home/vagrant/.ssh \
|
||||||
&& echo -n 'vagrant:vagrant' | chpasswd
|
&& echo -n 'vagrant:vagrant' | chpasswd
|
||||||
|
|
||||||
# Enable passwordless sudo for the "vagrant" user
|
# enable passwordless sudo for the "vagrant" user
|
||||||
RUN echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/vagrant \
|
RUN echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/vagrant \
|
||||||
&& chmod 0440 /etc/sudoers.d/vagrant
|
&& chmod 0440 /etc/sudoers.d/vagrant
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user