mirror of https://github.com/Aidaho12/haproxy-wi
134 lines
5.5 KiB
Python
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)
|