moved from ubuntu to alpine linux

This commit is contained in:
Marvin Steadfast 2016-02-07 14:43:53 +01:00
parent 858e739f70
commit 33fdbbad20
6 changed files with 1605 additions and 379 deletions

View File

@ -1,4 +1,4 @@
PY?=~/miniconda3/bin/python
PY?=/usr/bin/python3
PELICAN?=pelican
PELICANOPTS=

File diff suppressed because one or more lines are too long

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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