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
|
||||
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
|
||||
|
||||
roles:
|
||||
- miniconda
|
||||
|
||||
tasks:
|
||||
|
||||
- name: install deps
|
||||
apt:
|
||||
apk:
|
||||
name={{ item }}
|
||||
state=present
|
||||
update_cache=yes
|
||||
with_items:
|
||||
- ack
|
||||
- build-base
|
||||
- curl
|
||||
- git
|
||||
- lftp
|
||||
- pandoc
|
||||
- nodejs
|
||||
- nodejs-legacy
|
||||
- npm
|
||||
- mc
|
||||
- gcc
|
||||
- imagemagick
|
||||
- ack-grep
|
||||
- libstdc++
|
||||
- lftp
|
||||
- make
|
||||
- musl-dev
|
||||
- nodejs
|
||||
- perl
|
||||
- python3
|
||||
- python3-dev
|
||||
- python-dev
|
||||
become: yes
|
||||
|
||||
- name: install conda packages
|
||||
conda:
|
||||
name={{ item }}
|
||||
executable=/home/vagrant/miniconda3/bin/conda
|
||||
with_items:
|
||||
- jupyter=1.0.0
|
||||
- name: pip status
|
||||
stat:
|
||||
path=/usr/bin/pip
|
||||
register: pip
|
||||
|
||||
- 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:
|
||||
name={{ item }}
|
||||
executable=/home/vagrant/miniconda3/bin/pip
|
||||
with_items:
|
||||
- pelican==3.6.3
|
||||
- markdown
|
||||
- beautifulsoup4
|
||||
- cookiecutter==1.2.1
|
||||
- ipython[notebook]==2.4.1
|
||||
- markdown
|
||||
- pelican==3.6.3
|
||||
- tzlocal
|
||||
- virtualenv
|
||||
become: yes
|
||||
|
||||
- name: clone pelican-plugins
|
||||
git:
|
||||
@ -67,18 +76,13 @@
|
||||
mode=0644
|
||||
backup=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
|
||||
pip:
|
||||
name=ansible
|
||||
executable=/home/vagrant/miniconda3/envs/ansible/bin/pip
|
||||
virtualenv=~/ansible
|
||||
virtualenv_python=python
|
||||
state=latest
|
||||
|
||||
- name: clone batcave
|
||||
git:
|
||||
@ -87,20 +91,32 @@
|
||||
|
||||
- name: run batcave
|
||||
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
|
||||
|
||||
- name: export variables
|
||||
lineinfile:
|
||||
dest=~/.zshrc
|
||||
line="{{ item }}"
|
||||
line='{{ item }}'
|
||||
with_items:
|
||||
- export PYTHONIOENCODING=UTF-8
|
||||
- export LC_ALL=C.UTF-8
|
||||
|
||||
handlers:
|
||||
- name: no git colors
|
||||
command: git config --global color.ui false
|
||||
|
||||
- name: update timezone
|
||||
command:
|
||||
dpkg-reconfigure --frontend moninteractive tzdata
|
||||
- name: remove some deps
|
||||
apk:
|
||||
name={{ item }}
|
||||
state=absent
|
||||
with_items:
|
||||
- build-base
|
||||
- python3-dev
|
||||
- python-dev
|
||||
become: yes
|
||||
|
||||
- name: install make
|
||||
apk:
|
||||
name=make
|
||||
state=present
|
||||
become: yes
|
||||
|
@ -1,28 +1,25 @@
|
||||
FROM ubuntu:14.04
|
||||
FROM alpine:3.3
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
RUN apk add --update \
|
||||
bash \
|
||||
openssh \
|
||||
python \
|
||||
sudo \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y \
|
||||
openssh-server \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# create ssh keys
|
||||
RUN ssh-keygen -A
|
||||
|
||||
RUN mkdir -p /var/run/sshd \
|
||||
&& chmod 0755 /var/run/sshd
|
||||
# add vagrant user
|
||||
RUN adduser -h /home/vagrant -s /bin/sh -D vagrant
|
||||
|
||||
# Create and configure vagrant user
|
||||
RUN useradd --create-home -s /bin/bash vagrant
|
||||
|
||||
# Configure SSH access
|
||||
# configure SSH access
|
||||
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 \
|
||||
&& chown -R vagrant: /home/vagrant/.ssh \
|
||||
&& 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 \
|
||||
&& chmod 0440 /etc/sudoers.d/vagrant
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user