haproxy-wi/app/modules/provisioning/server.py

134 lines
5.5 KiB
Python

from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.common.common as common
import modules.roxywi.common as roxywi_common
import modules.server.server as server_mod
import modules.provisioning.common as prov_common
form = common.form
def init_server() -> None:
roxywi_common.check_user_group()
cmd = 'cd scripts/terraform/ && sudo terraform init -upgrade -no-color'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
if "Terraform initialized in an empty directory" in output[0]:
print('error: There is not need module')
elif "mkdir .terraform: permission denied" in output[0]:
print('error: Cannot init. Check permission to folder')
print(output[0])
def edit_server() -> None:
roxywi_common.check_user_group()
server_id = form.getvalue('editServerId')
user_group = form.getvalue('editGroup')
provider_name = form.getvalue('editProviderName')
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
lang = roxywi_common.get_user_lang()
show_editing_server = {
'aws': sql.select_aws_server,
'do': sql.select_do_server,
'gcore': sql.select_gcore_server,
}
server = show_editing_server[provider_name](server_id=server_id)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template(f'ajax/provisioning/{provider_name}_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params, lang=lang)
print(template)
def create_server() -> None:
roxywi_common.check_user_group()
workspace = form.getvalue('provisioning_workspace')
group = form.getvalue('provisioning_group')
provider_id = form.getvalue('provisioning_provider_id')
action = form.getvalue('provisioning_action')
cloud = form.getvalue('provisioning_cloud')
state_name = ''
if cloud == 'aws':
state_name = 'aws_instance'
elif cloud == 'do':
state_name = 'digitalocean_droplet'
elif cloud == 'gcore':
state_name = 'gcore_instance'
tfvars = f'{workspace}_{group}_{cloud}.tfvars'
cmd = f'cd scripts/terraform/ && sudo terraform apply -auto-approve -no-color -input=false -target=module.{cloud}_module -var-file vars/{tfvars}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider_id)
else:
if cloud == 'aws':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.aws_module.aws_eip.floating_ip[0]|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
else:
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
ips = ''
for ip in output:
ips += ip
ips += ' '
if cloud == 'gcore':
ips = ips.split(' ')[0]
print(ips)
try:
sql.update_provisioning_server_status('Created', group, workspace, provider_id, update_ip=ips)
except Exception as e:
print(e)
if cloud == 'gcore':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.gcore_module.gcore_instance.hapwi|grep "name"|grep -v -e "_name\|name_" |head -1 |awk -F"\\\"" \'{print $2}\''
output, stderr = server_mod.subprocess_execute(cmd)
print(':' + output[0])
try:
sql.update_provisioning_server_gcore_name(workspace, output[0], group, provider_id)
except Exception as e:
print(e)
roxywi_common.logging('Roxy-WI server', f'Server {workspace} has been {action}', provisioning=1)
def destroy_server() -> None:
roxywi_common.check_user_group()
server_id = form.getvalue('provisiningdestroyserver')
workspace = form.getvalue('servername')
group = form.getvalue('group')
cloud_type = form.getvalue('type')
provider_id = form.getvalue('provider_id')
tf_workspace = f'{workspace}_{group}_{cloud_type}'
cmd = f'cd scripts/terraform/ && sudo terraform init -upgrade -no-color && sudo terraform workspace select {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider_id)
else:
cmd = f'cd scripts/terraform/ && sudo terraform destroy -auto-approve -no-color -target=module.{cloud_type}_module -var-file vars/{tf_workspace}.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select default && sudo terraform workspace delete -force {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
print('ok')
roxywi_common.logging('Roxy-WI server', 'Server has been destroyed', provisioning=1)
try:
sql.delete_provisioned_servers(server_id)
except Exception as e:
print(e)