Prvsn
=================
`prvsn` is a simple provisioning tool.
It can provision linux and mac, either locally or remotely.
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



## 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.
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



## 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).
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
|