一个简单的配置工具
项目描述
Prvsn
=================
`prvsn`是一个简单的配置工具。
它可以配置Linux和mac,无论是本地还是远程。
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



## 动机
这个工具的动机是为了跟踪配置步骤,并且能够快速且最小化努力地重建一个小型设置(例如,树莓派)。
### 目标
易于快速设置用于黑客攻击的机器
- 容易配置单个机器
- 在Python中工作
- 简单的方式
- 添加文件,可能是模板
- 安装软件包
- 在bash中运行命令
- 即插即用
- Python 2.7 & 3兼容性
- 无外部依赖
### 非目标
大规模配置
- 配置数千或更多机器
- 严格依赖,复杂的依赖图
- 外部食谱和超市/存储支持
如果这些是你的目标,请查看Puppet或Chef或其他。
## 安装
### 安装
从PyPi
pip install prvsn
从GitHub
git clone git@github.com:acoomans/prvsn.git
cd prvsn
python setup.py install
或开发时使用
python setup.py develop
## 使用
### 层次
配置称为`roles`,并组成了一个`runbook`。
文件层次结构如下所示
runbook
|- roles
|- web
|- ...
|- desktop
|- main.py
|- files
- `main.py`是主要的Python入口点
- `files`用于包含您想要使用的任何文件
### 任务
角色的 `main.py` 可以包含一个或多个 `tasks`(也称为 `states`,因为它们主要是描述性的)。
常见的任务选项包括
- `secure`: 控制台和日志中不会显示任何输出。
#### 命令任务
`command(interpreter, cmd)`
`bash(cmd)`
在 bash 中运行一些代码。希望这种情况永远不会发生。
bash('echo "hello"')
bash('''
echo "hello"
ls
ps
''')
`ruby(cmd)`
在 ruby 中运行一些代码。
### 文件扩展名处理任务
`file_handler`(仅限 mac)
将应用程序与文件扩展名关联。
file_handler('.txt', 'com.macromates.TextMate')
可以使用以下命令查找应用程序的标识符
mdls -name kMDItemCFBundleIdentifier -r /Applications/TextMate.app
#### 文件任务
`file(source, file, replacements={})`
`source` 可以是一个 URL 或相对于角色 `files` 目录的文件路径。
file('asound.conf', '/etc/asound.conf')
file(
'http://example.com/asound.conf',
'/etc/asound.conf')
)
可以指定替换规则,因此文件充当模板。
file(
'resolv.conf',
'/etc/resolv.conf',
{
'MYIPADDRESS': '192.168.0.1'
}
)
### 主机名任务
`hostname`
hostname('my_machine')
#### 内核任务
`module(name)`(仅限 linux)
添加和加载一个模块。
module('v4l')
#### 软件包任务
`package`
应自动检测存在的包管理器。
如果有多个管理器存在,可以明确指定使用哪个。
package('vim')
[for package(p) in '''
vim
emacs
'''.split()]
`homebrew_package`(仅限 mac)
`cask_package`(仅限 mac)
`mac_app_store`(仅限 mac)
mac_app_store('937984704')
可以使用以下命令查找应用程序标识符
mas search app_name
`apt_package`
`yum_package`
### 命令行
#### init
为新的运行手册创建层次结构。
prvsn init -b path/to/runbook
#### provision
未指定主机时的默认命令。为 `prvsn` 运行的机器提供。
prvsn provision -b path/to/runbook -r role1,role2
或者,如果从运行手册目录运行
prvsn -r role1,role2
可以使用 `--sudo` 以 root 用户提供。
#### package
使用运行手册和角色创建可执行包。默认包名为 `package.pyz`。
prvsn package -b path/to/runbook -r role1,role2 -o mypackage.pyz
然后可以单独运行该包
python mypackage.pyz
#### remote
指定主机时的默认命令。通过以下方式提供远程主机
1. 创建包
2. 通过 ssh 发送包
3. 通过 ssh 运行包
示例
prvsn remote -b path/to/runbook -r role1,role2 -n myhostname -u myuser
此外,ssh 公钥将安装到远程主机(如果没有密钥,将创建一个)。要禁用此行为,请使用 `--no-copy-keys`。
可以使用 `--sudo` 以 root 用户在远程主机上提供。
=================
`prvsn`是一个简单的配置工具。
它可以配置Linux和mac,无论是本地还是远程。
[](https://travis-ci.org/acoomans/prvsn)
[](https://pypi.python.org/pypi/prvsn)
[](https://pypi.python.org/pypi/prvsn)



## 动机
这个工具的动机是为了跟踪配置步骤,并且能够快速且最小化努力地重建一个小型设置(例如,树莓派)。
### 目标
易于快速设置用于黑客攻击的机器
- 容易配置单个机器
- 在Python中工作
- 简单的方式
- 添加文件,可能是模板
- 安装软件包
- 在bash中运行命令
- 即插即用
- Python 2.7 & 3兼容性
- 无外部依赖
### 非目标
大规模配置
- 配置数千或更多机器
- 严格依赖,复杂的依赖图
- 外部食谱和超市/存储支持
如果这些是你的目标,请查看Puppet或Chef或其他。
## 安装
### 安装
从PyPi
pip install prvsn
从GitHub
git clone git@github.com:acoomans/prvsn.git
cd prvsn
python setup.py install
或开发时使用
python setup.py develop
## 使用
### 层次
配置称为`roles`,并组成了一个`runbook`。
文件层次结构如下所示
runbook
|- roles
|- web
|- ...
|- desktop
|- main.py
|- files
- `main.py`是主要的Python入口点
- `files`用于包含您想要使用的任何文件
### 任务
角色的 `main.py` 可以包含一个或多个 `tasks`(也称为 `states`,因为它们主要是描述性的)。
常见的任务选项包括
- `secure`: 控制台和日志中不会显示任何输出。
#### 命令任务
`command(interpreter, cmd)`
`bash(cmd)`
在 bash 中运行一些代码。希望这种情况永远不会发生。
bash('echo "hello"')
bash('''
echo "hello"
ls
ps
''')
`ruby(cmd)`
在 ruby 中运行一些代码。
### 文件扩展名处理任务
`file_handler`(仅限 mac)
将应用程序与文件扩展名关联。
file_handler('.txt', 'com.macromates.TextMate')
可以使用以下命令查找应用程序的标识符
mdls -name kMDItemCFBundleIdentifier -r /Applications/TextMate.app
#### 文件任务
`file(source, file, replacements={})`
`source` 可以是一个 URL 或相对于角色 `files` 目录的文件路径。
file('asound.conf', '/etc/asound.conf')
file(
'http://example.com/asound.conf',
'/etc/asound.conf')
)
可以指定替换规则,因此文件充当模板。
file(
'resolv.conf',
'/etc/resolv.conf',
{
'MYIPADDRESS': '192.168.0.1'
}
)
### 主机名任务
`hostname`
hostname('my_machine')
#### 内核任务
`module(name)`(仅限 linux)
添加和加载一个模块。
module('v4l')
#### 软件包任务
`package`
应自动检测存在的包管理器。
如果有多个管理器存在,可以明确指定使用哪个。
package('vim')
[for package(p) in '''
vim
emacs
'''.split()]
`homebrew_package`(仅限 mac)
`cask_package`(仅限 mac)
`mac_app_store`(仅限 mac)
mac_app_store('937984704')
可以使用以下命令查找应用程序标识符
mas search app_name
`apt_package`
`yum_package`
### 命令行
#### init
为新的运行手册创建层次结构。
prvsn init -b path/to/runbook
#### provision
未指定主机时的默认命令。为 `prvsn` 运行的机器提供。
prvsn provision -b path/to/runbook -r role1,role2
或者,如果从运行手册目录运行
prvsn -r role1,role2
可以使用 `--sudo` 以 root 用户提供。
#### package
使用运行手册和角色创建可执行包。默认包名为 `package.pyz`。
prvsn package -b path/to/runbook -r role1,role2 -o mypackage.pyz
然后可以单独运行该包
python mypackage.pyz
#### remote
指定主机时的默认命令。通过以下方式提供远程主机
1. 创建包
2. 通过 ssh 发送包
3. 通过 ssh 运行包
示例
prvsn remote -b path/to/runbook -r role1,role2 -n myhostname -u myuser
此外,ssh 公钥将安装到远程主机(如果没有密钥,将创建一个)。要禁用此行为,请使用 `--no-copy-keys`。
可以使用 `--sudo` 以 root 用户在远程主机上提供。