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为什么这一行是charg=(char)(br.read());被跳过?   java三重DES中的IV在哪里?   java Lombok注释不在Intellij idea下编译   java为什么我不能使用过滤器作为流中的最后一步   sqlite Java编译错误找不到符号方法next()   在Java中解析处理对int来说太大的数字   java摄像头不工作   java是“断言错误”好的做法?   java确定api请求是来自CURL还是POSTMAN?   JavaSpringMVC导航   java使单例模式代码更强大   当Java(解释器)区分大小写时,为什么Java编译器(javac)不区分大小写?   java注释字符串[]oneArr();vs字符串[][]twoArr();公告   java命名查询的利弊   java使用log4jweb在web应用程序中配置Log4j2。罐子   java正则表达式查找以开头和结尾的所有可能出现的文本~   java从字符串执行方法