A simple provisioning tool
Project description
Prvsn
=================
`prvsn` is a simple provisioning tool.
It can provision linux and mac, either locally or remotely.
[![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)
## 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 Extension Handler Tasks
`file_handler` (mac only)
Associate an application with a file extension.
file_handler('.txt', 'com.macromates.TextMate')
The application's identifier can be found with:
mdls -name kMDItemCFBundleIdentifier -r /Applications/TextMate.app
#### 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'
}
)
### Hostname tasks
`hostname`:
hostname('my_machine')
#### 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:
package('vim')
[for package(p) in '''
vim
emacs
'''.split()]
`homebrew_package` (mac only)
`cask_package` (mac only)
`mac_app_store` (mac only)
mac_app_store('937984704')
Application identifiers can be found with:
mas search app_name
`apt_package`
`yum_package`
### 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).
=================
`prvsn` is a simple provisioning tool.
It can provision linux and mac, either locally or remotely.
[![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)
## 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 Extension Handler Tasks
`file_handler` (mac only)
Associate an application with a file extension.
file_handler('.txt', 'com.macromates.TextMate')
The application's identifier can be found with:
mdls -name kMDItemCFBundleIdentifier -r /Applications/TextMate.app
#### 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'
}
)
### Hostname tasks
`hostname`:
hostname('my_machine')
#### 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:
package('vim')
[for package(p) in '''
vim
emacs
'''.split()]
`homebrew_package` (mac only)
`cask_package` (mac only)
`mac_app_store` (mac only)
mac_app_store('937984704')
Application identifiers can be found with:
mas search app_name
`apt_package`
`yum_package`
### 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
Release history Release notifications | RSS feed
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.3.tar.gz
(14.1 kB
view details)
File details
Details for the file prvsn-0.3.tar.gz
.
File metadata
- Download URL: prvsn-0.3.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 93d20256006798a0068236304ac15db6ac06262d2125217f7b3def8422e23b59 |
|
MD5 | d7fe0e37f682e267a587fb157f461313 |
|
BLAKE2b-256 | 29c666ca4f04d29fbfa46c27501c1f5573fc83cb9c0a426058d049c9d90da993 |