-
Notifications
You must be signed in to change notification settings - Fork 0
/
deploy.py
139 lines (101 loc) · 3 KB
/
deploy.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import logging
import argparse
import os
import warnings
import subprocess
from rtk.deployment import RTKApp
def selector(func):
def wrapper(name, **kwargs):
if name is not None:
app = RTKApp(name, **kwargs)
else:
selection = _select_app()
if selection is not None:
app = RTKApp(selection, **kwargs)
else:
return None
return func(app, **kwargs)
return wrapper
def _apps():
return os.listdir(".rtk_deployment/")
def _select_app():
print("The following apps are available:")
for app in _apps():
print(app)
count = 1
selection = input("Deployment target:")
while selection not in _apps():
selection = input("Deployment target:".format(count))
print("No such app, try again ({0}/3 attempts)...")
count += 1
if count > 3:
logger.info("Too many retries. Aborted deployment.")
return None
return selection
def _add_app(name, dummy=False):
if not name.islower():
warnings.warn("All app names must be in lower case.")
name = name.lower()
if name in _apps():
logger.error("App name '{0}' already in installed apps -- specify a unique name and try again.".format(name))
raise ValueError("Non-unique app ID: '{0}'.".format(name))
else:
app = RTKApp(name)
return app
def add(name, dummy=False, default=True):
if name is not None:
app = _add_app(name, dummy)
else:
app = _add_app(input("App name: "), dummy)
app.build(default=default)
# @selector
# def copy(app):
# app.copy()
@selector
def update(app):
app.update()
@selector
def activate(app):
app.deploy()
@selector
def remove(app):
app.delete()
# app.restart()
# subprocess.call(["bash", "./djangostack-2.0.3-0", "restart"])
@selector
def deactivate(app):
app.deactivate()
app.restart()
@selector
def reactivate(app):
app.reactivate()
app.restart()
parser = argparse.ArgumentParser()
parser.add_argument("command")
parser.add_argument("--target")
parser.add_argument("--dummy", default=True)
if __name__ == "__main__":
args = parser.parse_args()
logger = logging.getLogger("RTKDeploy")
logging.basicConfig(level=logging.DEBUG)
if args.command == "add":
add(args.target, args.dummy)
elif args.command == "activate":
activate(args.target, mode=args.dummy)
elif args.command == "deactivate":
deactivate(args.target)
elif args.command == "reactivate":
reactivate(args.target)
elif args.command == "remove":
remove(args.target)
elif args.command == "update":
update(args.target)
# elif args.command == "copy":
# copy(args.target)
elif args.command == "available":
for app in _apps():
print(app)
# elif args.command == "test":
# test(args.target, mode=args.dummy)
else:
logger.error("Unknown command '{0}'.".format(args.command))