forked from devopsloft/devopsloft
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspin.py
executable file
·114 lines (94 loc) · 3.6 KB
/
spin.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
#!/usr/bin/env python3
import dotenv
import vagrant
import os
import click
from createPemFiles import SelfSignedCertificate, IsCertExist
vagrant_box = ""
vagrant_box_url = ""
vagrant_box_provider = ""
print_debug = 'No'
def print_info(message):
global print_debug
if print_debug == 'yes':
print("--- python debug ---> ", message)
def PrepareEnvironmentVars(environementName, action):
# Reads the .env file from the repository
# Returns an array with all the env vars, inclduing modificatoins per env
global vagrant_box
global vagrant_box_url
global vagrant_box_provider
dotenv.load_dotenv()
envArray = os.environ.copy()
envArray['RUN_BY_PYTHON'] = 'yes'
if (environementName == 'dev'):
envArray['WEB_HOST_PORT'] = envArray['DEV_WEB_HOST_PORT']
envArray['WEB_GUEST_PORT'] = envArray['DEV_WEB_GUEST_PORT']
envArray['WEB_HOST_SECURE_PORT'] = envArray['DEV_WEB_HOST_SECURE_PORT']
envArray['WEB_GUEST_SECURE_PORT'] = \
envArray['DEV_WEB_GUEST_SECURE_PORT']
envArray['VAGRANT_RUN_COMMAND'] = action
envArray['VAGRANT_ENV_COMMAND'] = environementName
vagrant_box = envArray['DEV_VAGRANT_BOX']
envArray['VAGRANT_BOX'] = envArray['DEV_VAGRANT_BOX']
vagrant_box_url = envArray['DEV_VAGRANT_URL']
envArray['VAGRANT_URL'] = vagrant_box_url
vagrant_box_provider = envArray['DEV_VAGRANT_PROVIDER']
envArray['VAGRANT_PROVIDER'] = vagrant_box_provider
return envArray
def startVagrant(machineName, envVars):
# Starts a Vagrant instance with noisy logs
# Loading the enviornement vars that was created in prepareEnvironmentVars
v = vagrant.Vagrant(quiet_stdout=False, quiet_stderr=False)
v.env = envVars
# v.up(vm_name=vagrant_box,provider=vagrant_box_provider)
v.up()
def destroyVagrant(machineName, envArray):
v = vagrant.Vagrant(quiet_stdout=False, quiet_stderr=False)
v.env = envArray
v.destroy(vm_name=machineName)
def updateBox(envArray):
v = vagrant.Vagrant(quiet_stdout=False, quiet_stderr=False)
v.env = envArray
machines = v.box_list()
for i in machines:
print_info("Search machine: ")
print_info(i)
if i.name == vagrant_box:
print_info("Found it: ")
print_info(i)
print_info("Update Machine: ")
v.box_update()
print_info("Prone Machine: ")
v.box_prune()
return
print_info("Adding a new machine to your repository: ")
print_info(vagrant_box)
v.box_add(name=vagrant_box, url=vagrant_box_url,
provider=vagrant_box_provider, force=True)
v.box_update(vagrant_box, vagrant_box_provider)
v.box_prune()
@click.command()
@click.option("-e", "--envioronment", required=False, default="dev",
type=click.Choice(["dev", "prod", "stage"]))
@click.option("-a", "--action", required=False, default="up",
type=click.Choice(["up", "destroy"]))
@click.option("-d", "--debug", required=False, default="no",
type=click.Choice(["yes", "no"]))
def main(envioronment, action, debug):
machineName = envioronment
envVars = machineName
envVars = PrepareEnvironmentVars(envVars, action)
global print_debug
print_debug = debug
if not (IsCertExist()):
SelfSignedCertificate()
if action == 'up':
if envioronment == 'dev':
updateBox(envVars)
print("start Vagrant ...")
startVagrant(machineName, envVars)
elif action == 'destroy':
destroyVagrant(machineName, envVars)
if __name__ == '__main__':
main()