phpservermon/puphpet/puppet/modules/pyenv/README.md

155 lines
5.4 KiB
Markdown

# pyenv
[Pyenv](https://github.com/yyuu/pyenv) provides a way to build and use
Pythons outside of your platforms package manager's purview.
#### Table of contents
1. [Overview - What is the pyenv module?](#overview)
2. [Module description - What is the purpose of this mdoule?](#module-description)
3. [Setup - The basics of getting started with pyenv](#setup)
* [Beginning with pyenv - Installation](#beginning-with-pyenv)
* [Installing a Python - Basic options for getting started](#installing-a-python)
* [Relocating pyenv](#relocating-the-pyenv-installation)
4. [Usage - The classes and types available for configuration](#usage)
* [Classes](#classes)
* [Class: pyenv](#class-pyenv)
* [Types](#types)
* [Type: pyenv_python](#type-pyenv_python)
## Overview
The pyenv module allows you to install pyenv on a target system. The module
also provides a Puppet type called `pyenv_python` which will instruct pyenv
to build a Python for you.
This module only supports global installations of pyenv, meaning it will not
install into a user's home directory. Though it can be made to do so the types
that come with it do not support this work flow.
## Module description
Python is a often-used programming language ranging from simple scripts to
automate a repetitive task to powering large (web) applications. The problem we
often encounter is that a distribution only ships with one (outdated) Python
version. Pyenv remedies this situation by allow you to build your own Pythons
and use those instead.
## Setup
This modules will:
* Install pyenv for you. It will do so by checking out the latest tag at the
time this module was written;
* Symlink pyenv so that it will be found when looking through `$PATH`;
* Install the necessary packages to ensure you can build Python;
* A type and provider to make Puppet build Pythons through pyenv.
This module requires:
* [puppetlabs/stdlib](https://forge.puppetlabs.com/puppetlabs/stdlib)
* [puppetlabs/vcsrepo](https://forge.puppetlabs.com/puppetlabs/vcsrepo)
### Beginning with pyenv
In order to install pyenv with the defaults:
```puppet
include ::pyenv
```
This will install pyenv for you in `/usr/local/pyenv` and symlink
`/usr/local/bin/pyenv` to `/usr/local/pyenv/bin/pyenv`.
### Installing a Python
Use the `pyenv_python` type to instruct Puppet to build a Python:
```puppet
pyenv_python { '3.4.0': }
```
The `pyenv_python` defaults to `ensure => present,`, therefor you do not need to
specify it yourself.
If you want to build a debug version of a Python add *-debug* to the name of
the Python:
```puppet
pyenv_python { '3.4.0-debug': }
```
### Relocation the pyenv installation
The module installs pyenv to `/usr/local/pyenv` by default and symlinks the
`pyenv` binary onto your path. This is needed so that the provider can find
`pyenv` and set up the `PYENV_ROOT` environment variable accordingly.
If you change the location of the pyenv checkout you must either:
* Make sure the symlink is changed too. This is done automatically if you
set `symlink_pyenv` to true;
* Create a custom Fact called `pyenv_binary` with the location of
`/path/to/checkout/bin/pyenv`.
The former of the two methods is preferred if at all possible.
If Puppet's `$PATH` does not by default include `/usr/local/bin` either add
that to it or change the `symlink_path` to a different location that is part of
Puppet's `$PATH`.
## Usage
### Classes and defined types
#### Class: `pyenv`
The pyenv module's primary and only class, `pyenv` sets up your system with pyenv
and the necessary packages to compile.
It takes the following parameters:
* `ensure_repo`: Whether to add or remove the repository
* default: `present`
* options: `present`, `absent`
* `repo_location`: Where to checkout the repository on the filesystem
* default: `/usr/local/pyenv`
* options: any absolute path
* `repo_revision`: The revision to checkout
* default: `v0.4.0-20140404`
* options: tag, commit SHA, branch
* `symlink_pyenv`: Create a symlink to the pyenv binary
* default: `true`
* options: `true`, `false`
* `symlink_path`: Where to symlink pyenv to
* default: `/usr/local/bin`
* options: any absolute path known to `$PATH`
* `manage_packages`: Install packages needed to compile Python
* default: `true`
* options: `true`, `false`
* `ensure_packages`: State of the packages to ensure
* default: `latest`
* options: any valid value for the ensure attribute of the package type
* `python_build_packages`: Array/list of packages to install
* default: depends on what Facter returns for `osfamily`, see
(params.pp)[params.pp]
* options: an array of strings representing package names
### Types
#### Type: `pyenv_python`
`pyenv_python` allows you to build a Python which in turn will make it
available to someone wishing to use it.
It takes the following options:
* `name` (namevar): name of the Python to be installed, see `pyenv install -l`.
If omitted the title of the resource will be used.
* `ensure`: state the Python should be in
* default: `present`
* options: valid values for ensure
* `keep`: keep the sources after compiling
* default: `false`
* options: `true`, `false`
* `virtualenv`: Install virtualenv in the new Python
* default: `false`
* options: `true`, `false`
Keep one thing in mind: if a Python was installed **without** setting `keep` to
`true` you cannot add it later, the provider will call the `fail()` method in
such cases.