forked from kurhula/monster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
storage.py
executable file
·111 lines (84 loc) · 3.03 KB
/
storage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#! /usr/bin/env python
""" Command Line interface for Building Openstack Swift clusters
"""
import sys
import traceback
import argh
from monster import util
from monster.provisioners import provisioner as provisioners
from monster.config import Config
from monster.deployments.chef_deployment import ChefDeployment
def build(name="precise-swift", branch="master", provisioner="razor",
template_path=None, config=None, destroy=False,
dry=False, log=None, log_level="INFO"):
""" Builds an OpenStack Swift storage cluster
"""
_set_log(log, log_level)
# provisiong deployment
util.config = Config(config)
class_name = util.config["provisioners"][provisioner]
cprovisioner = util.module_classes(provisioners)[class_name]()
deployment = ChefDeployment.fromfile(name, branch, cprovisioner,
template_path)
if dry:
# build environment
try:
deployment.update_environment()
except Exception:
util.logger.error(traceback.print_exc())
deployment.destroy()
sys.exit(1)
else:
util.logger.info(deployment)
# build deployment
try:
deployment.build()
except Exception:
util.logger.error(traceback.print_exc())
deployment.destroy()
sys.exit(1)
util.logger.info(deployment)
if destroy:
deployment.destroy()
def destroy(name="precise-swift", config=None, log=None, log_level="INFO"):
""" Tears down a OpenStack Storage cluster
"""
_set_log(log, log_level)
deployment = _load(name, config)
util.logger.info(deployment)
deployment.destroy()
def test(name="precise-swift", config=None, log=None, log_level="INFO"):
""" Tests a OpenStack Storage cluster
"""
_set_log(log, log_level)
deployment = _load(name, config)
deployment.test()
def openrc(name="precise-swift", config=None, log=None, log_level="INFO"):
""" Loads the admin environment locally for a OpenStack Storage cluster
"""
_set_log(log, log_level)
deployment = _load(name, config)
deployment.openrc()
def load(name="precise-swift", config=None, log=None, log_level="INFO"):
""" Loads a preconfigured OpenStack Storage cluster
"""
_set_log(log, log_level)
# load deployment and source openrc
deployment = _load(name, config)
util.logger.info(str(deployment))
def _load(name="precise-swift", config=None, provisioner="razor"):
# load deployment and source openrc
util.config = Config(config)
class_name = util.config["provisioners"][provisioner]
cprovisioner = util.module_classes(provisioners)[class_name]()
return ChefDeployment.from_chef_environment(name, provisioner=cprovisioner)
def _set_log(log, log_level):
# set log level and file
util.set_log_level(log_level)
if log:
util.log_to_file(log)
# Main
if __name__ == "__main__":
parser = argh.ArghParser()
parser.add_commands([build, destroy, openrc, load])
parser.dispatch()