Skip to main content

A simple provisioning tool

Project description

Prvsn
=================

`prvsn` is a simple provisioning tool.

[![Build](https://travis-ci.org/acoomans/prvsn.svg?branch=master)](https://travis-ci.org/acoomans/prvsn)
[![Pypi version](http://img.shields.io/pypi/v/prvsn.svg)](https://pypi.python.org/pypi/prvsn)
[![Pypi license](http://img.shields.io/pypi/l/prvsn.svg)](https://pypi.python.org/pypi/prvsn)
![Python 2](http://img.shields.io/badge/python-2-blue.svg)
![Python 3](http://img.shields.io/badge/python-3-blue.svg)

![Screenshot](documentation/screenshot.png)

- provisioning of local machine
- provisioning of remote machine over ssh

## Motivation

The motivation for this tool is too keep track of configuration steps and being able to rebuild a small setup (e.g. a raspberry pi) quickly and with minimal effort.

### Goals

Easy for quickly setup a machine for hacking:

- easy to provision a single machine
- works in python
- simple way to
- add a file, possibly a template
- install package
- run a command in bash
- works out of the box:
- python 2.7 & 3 compatibility
- no external dependencies

### Non-Goals

Large scale provisioning:

- provision thousands or more machines
- strict dependencies, complex dependency graph
- external recipes & supermarket/store support

If those are your goals, have a look at Puppet or Chef or others.


## Installation

### Install

From PyPi:

pip install prvsn

From Github:

git clone git@github.com:acoomans/prvsn.git
cd prvsn
python setup.py install

Or for development:

python setup.py develop


## Usage

### Hierarchy

Configurations are called `roles` and are grouped into a `runbook`.

The file hierarchy looks like:

runbook
|- roles
|- web
|- ...
|- desktop
|- main.py
|- files


- `main.py` is the main python entry point
- `files` is to contain any files you want to use

### Tasks

A role's `main.py` can contain one or more `tasks` (also called `states` since they're mostly descriptive).

Common task options include:

- `secure`: no output will be shown on console nor logs.


#### Command Tasks

`command(interpreter, cmd)`

`bash(cmd)`:

Runs some code in bash. Hopefully this is never needed.

bash('echo "hello"')

bash('''
echo "hello"
ls
ps
''')

`ruby(cmd)`

Runs some code in ruby.


#### File Tasks

`file(source, file, replacements={})`:

`source` can either be a URL or a file's path relative to the role's `files` directory.

file('asound.conf', '/etc/asound.conf')

file(
'http://example.com/asound.conf',
'/etc/asound.conf'
)

replacements rules can be specified, so the file acts as a template.

file(
'resolv.conf',
'/etc/resolv.conf',
{
'MYIPADDRESS': '192.168.0.1'
}
)

#### Kernel Tasks

`module(name)` (linux only):

Adds and loads a module.

module('v4l')

#### Package Tasks

`package`:

Should automatically detect the package manager in presence.
If multiple managers are present, it is possible to explicitly specify which to use:

`homebrew_package`

`apt_package`

`yum_package`

package('vim')

### Command line

#### init

Creates the hierarchy for a new runbook.

prvsn init -b path/to/runbook

#### provision

Default command if no host is specified. Provisions the machine `prvsn` runs on.

prvsn provision -b path/to/runbook -r role1,role2

or alternatively, if running from the runbook directory:

prvsn -r role1,role2

`--sudo` can be used to provision as root.

#### package

Creates an executable package with the runbook and the roles. The default package name is `package.pyz`.

prvsn package -b path/to/runbook -r role1,role2 -o mypackage.pyz

The package can then be run individually:

python mypackage.pyz

#### remote

Default command if a host is specified. Provision a remote host by:

1. creating a package
2. sending the package over ssh
3. running the package over ssh

example:

prvsn remote -b path/to/runbook -r role1,role2 -n myhostname -u myuser

Additionally, ssh public key will be installed on the remote host (if no key is present, one is created). To disable this behavior, use '--no-copy-keys'.

`--sudo` can be used to provision as root (on the remote host).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prvsn-0.2.tar.gz (12.2 kB view details)

Uploaded Source

File details

Details for the file prvsn-0.2.tar.gz.

File metadata

  • Download URL: prvsn-0.2.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for prvsn-0.2.tar.gz
Algorithm Hash digest
SHA256 039df477e38195ba256a2e80ae4ff051ab93342cd2a59f87abf95b080ffb19dc
MD5 22f8452075c175cc37be3cad36dae302
BLAKE2b-256 c689d3ef2ad6966e1c71fd1e4f79aee0d383ce8a2783543726a7366bfc5385e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page