A simple provisioning tool
Project description
Prvsn
=================
`prvsn` is a simple provisioning tool.
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



- 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).
=================
`prvsn` is a simple provisioning tool.
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



- 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
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.2.tar.gz
(12.2 kB
view details)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 |
039df477e38195ba256a2e80ae4ff051ab93342cd2a59f87abf95b080ffb19dc
|
|
MD5 |
22f8452075c175cc37be3cad36dae302
|
|
BLAKE2b-256 |
c689d3ef2ad6966e1c71fd1e4f79aee0d383ce8a2783543726a7366bfc5385e2
|