snaptastic是一个python工具,用于在aws/ec2 ebs卷上轻松地快照和装载快照。

snaptastic的Python项目详细描述


Snaptastic作者:Mike Ryan&Thierry Schellenbach([mellowmorning.com](http://www.mellowmorning.com/))
——卷
在EC2实例上。

它使用快照标记来确定启动时应使用哪个快照填充卷。

Fashiolista的Syadmin
-Peter van Kampen,Fashiolista的开发人员

![特拉维斯国际](https://secure.travis-ci.org/tschellenbach/snaptastic.png?branch=master"travis ci")

install
----

**pip**

`` python
pip install snaptastic
````

**设置文件**

创建设置文件
**/etc/snaptastic/snaptastic/snaptastic='key'
aws_secret_access_key='secret'
region='eu-west-1'


snaptastic import snapshotter,ebsvolume



class solrsnapshotter(snapshotter):
name='solr'

def get_volumes(self):
volume=ebsvolume('/dev/sdf','/mnt/solr',size=20)
volume s=[volume]
返回volumes
```

**验证**

```python
sudo snaptastic test
sudo snaptastic list volumes solr
```

就是这样,现在可以使用snaptastic了。

tutorial
--

**mount**

``python
snaptastic mount snapshots solr
````
/mnt/solr/helloworld
```

**制作快照**


制作此重要更改的快照的时间
``python
snaptastic make snapshots solr
````

**销毁我们的工作**
``python
`snaptastic unmount snapshots solr
```
检查/mnt/solr/is实际消失了

**从备份还原**
``python
snaptastic mount snapshots solr
````

**更改cronjob的日志级别**
``python
``snaptastic mount snapshots solr--loglevel=warning
``




在装入卷时标记Snaptastic将搜索具有正确标记的快照。
默认情况下,它将查找:


*角色
*群集
*环境
*装入点(建议您不要更改此点)


以将快照唯一标识为应用程序逻辑。
更改使用的标记要适应您的应用程序设置很简单。
只需对snapshotter类进行子类划分并更改get-filter-tags函数。
请看下面的示例:

``python
class customfiltersnapshotter(snapshotter):
name='filter-example'

def获取过滤器标记(self):
'
用于查找要从中加载的正确快照的标记。
除了这些标记外,还始终添加装入点。

使用这些标记来唯一标识基础结构的不同部分
''
标记{
"组":self.userdata['group'],
}
返回标记
````



settings file
----


>有关更多示例,请参见examples.py


snaptastic在sys.path
*/etc/snaptastic settings.py
*/etc/snaptastic/snaptastic_settings.py


hooks
----


snaptastic定义了几个钩子,允许自定义快照行为。


提供以下钩子:

*预安装(自安装,卷):
*后安装(自安装,卷):
*预安装(自安装,卷):
*后装载(self,vol):
*前卸载(self,volumes):
*后_卸载(self,卷):
*卸载前(self,vol):
*卸载后(self,vol):
*快照前(self,卷):
*快照后(self,卷):
*快照前(self,vol):
*快照后(self,vol):

示例
--

>基本卷自定义

`` python
类mysnapshotter(snapshotter):
名称='简单示例'


def get_volumes(self):
卷=[ebsvolume('/dev/sdf1','/mnt/index',size=200)
返回卷
````

自定义筛选标记
``python
类customfiltersnapshotter(snapshotter):
name='filter\u example'

'
用于查找正确标记的标记要从中加载的快照。
除了这些标记之外,还始终添加装入点。


使用这些标记来唯一标识基础结构的不同部分返回标记
```


"mount_point":"/var/lib/postgresql/9.1/main",
"size":200
}
'
"name="userdata"example"


"def get"volumes(self):
volume"dicts=self.userdata["volumes"]
volumes=[]
volume"dicts"中的volume"dict:
volume=ebsvolume(**volume"dict"
volumes.append(volume)
return volumes
```

预装载(self):
导入子流程
子流程。检查输出(['/etc/init.d/postgresql','stop'])

def post装载(self):
导入子流程
修复postgresql目录的权限
子流程。检查输出(['chmod','-r','0700','/var/lib/postgresql'])
子流程。检查输出(
['chown','-r','postgres:postgres','/var/lib/postgresql'])

```






系统
----


在移植旧系统时,通常需要伪造用户数据。
这样做非常简单:


sudo snaptastic make snapshots solr--userdata='{"role":"solr","cluster":"solr","environment":"aws"}'



cronjobs和日志记录
----


更改日志级别非常容易。只需使用--loglevel选项调用任何命令即可。
在内部使用python日志模块。因此,有效的选项是:
调试、信息、警告、错误、关键
对于cronjobs,我建议将其设置为warning

**更改日志级别**
``python
snaptastic mount snapshots solr--loglevel=warning
```

如果需要对日志进行更详细的控制,可以更改python日志模块使用的snaptastic_settings.py中的logging_config


volume对象
----

**基本200GB卷**
``python
ebsvolume('/dev/sdf1','/var/lib/postgresql/9.1/main',200),
```

**现在有IOPS**
``python
ebsvolume('/dev/sdf1','/var/lib/postgresql/9.1/main',200,IOPS=1600),
`````

**现在是ext4**
``python
``ebsvolume('/dev/sdf1','/var/lib/postgresql/9.1/main',200,file-system=filesystems.ext4),
```



todo
---


*集成cleanup scripts
*实例终止后自动终止卷
*跨区域使用的自动检测区域


贡献和项目工作流
看看待办事项,了解还缺少什么。请始终为您的功能/错误添加unittests(如果可能)。

*fab validate(检查pep8和unittests)
*fab publish(如果测试正常,则发布新版本,标记,pypi)
*fab clean(尝试自动清除pep8错误)


运行测试
-




django jobs
-
您是否也看到了clean代码中的美丽之处?你对高扩展性的网络应用有经验吗?
目前,我们正在阿姆斯特丹办事处寻找更多的人才。
如需了解更多信息,请在我的个人电子邮件中留言:thierryschellenbach[at]gmail.com

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么数组中的空格(“”)有错误?   java我需要一个正则表达式,它只接受一个字符串(只有字母和数字),在开头和结尾允许有空格,但不能在两者之间?   更改列表视图适配器后禁用java Fast scoll   java JTable在使用DefaultTableModel插入后未刷新   java这是在JavaFX中切换场景的正确方法吗?   java如何在GWT中清除根面板?   java如何正确使用加载数组和保存数组方法?   使用JavaMail API在电子邮件中单击链接   交互式Java程序   JavaSpring、Morphia和DataAccessException实现   JAVA试图用randoop生成单元测试的lang.IllegalStateException   Android上的javanio性能   java为列表添加值初始化列表大小   swing Java图形不在底部和右侧绘制   java如何调用scanDouble()方法?   java Android截击无连接错误   java正则表达式和AwkFilenameFilter   Asm api版本定义中的java按位OR运算符