diff --git a/app/add_nginx.py b/app/add_nginx.py new file mode 100755 index 00000000..67a85e79 --- /dev/null +++ b/app/add_nginx.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import sys +import http.cookies + +from jinja2 import Environment, FileSystemLoader + +import funct +import sql +import modules.roxy_wi_tools as roxy_wi_tools + +get_config_var = roxy_wi_tools.GetConfigVar() +form = funct.form +serv = form.getvalue('serv') + +print('Content-type: text/html\n') + +user, user_id, role, token, servers, user_services = funct.get_users_params(service='nginx') + +try: + funct.check_login(user_id, token, service=2) +except Exception as e: + print(f'error {e}') + sys.exit() + +funct.page_for_admin(level=3) + +if all(v is None for v in [ form.getvalue('upstream'), form.getvalue('generateconfig') ]): + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) + template = env.get_template('add_nginx.html') + template = template.render( + title="Add: ", role=role, user=user, selects=servers, add=form.getvalue('add'), conf_add=form.getvalue('conf'), + user_services=user_services, token=token + ) + print(template) +elif form.getvalue('upstream') is not None: + nginx_dir = sql.get_setting('nginx_dir') + name = form.getlist('name') + new_upstream = form.getvalue('upstream') + ip = '' + port = '' + config_add = '' + servers_split = '' + + if new_upstream is not None: + config_add = f'upstream {new_upstream} {{\n' + config_add += f' {form.getvalue("balance")};\n' + config_name = f'upstream_{new_upstream}' + + if form.getvalue('keepalive') is not None: + config_add += f' keepalive {form.getvalue("keepalive")};\n' + + if form.getvalue('servers') is not None: + servers = form.getlist('servers') + server_port = form.getlist('server_port') + max_fails = form.getlist('max_fails') + fail_timeout = form.getlist('fail_timeout') + i = 0 + for server in servers: + try: + max_fails_val = f'max_fails={max_fails[i]}' + except Exception: + max_fails_val = 'max_fails=1' + + try: + fail_timeout_val = f'fail_timeout={fail_timeout[i]}' + except Exception: + fail_timeout_val = 'fail_timeout=1' + + servers_split += f" server {server}:{server_port[i]} {max_fails_val} {fail_timeout_val}s; \n" + i += 1 + config_add += f'{servers_split} }}\n' + +if form.getvalue('generateconfig') is None and serv is not None: + slave_output = '' + try: + server_name = sql.get_hostname_by_server_ip(serv) + except Exception: + server_name = serv + + try: + funct.check_is_server_in_group(serv) + if config_add: + sub_folder = 'conf.d' if 'upstream' in config_name else 'sites-enabled' + + service_configs_dir = get_config_var.get_config_var('configs', 'nginx_save_configs_dir') + cfg = f'{service_configs_dir}{serv}-{config_name}.conf' + nginx_dir = funct.return_nice_path(sql.get_setting('nginx_dir')) + + config_file_name = f'{nginx_dir}{sub_folder}/{config_name}.conf' + + try: + with open(cfg, "w") as conf: + conf.write(config_add) + except IOError: + print("error: Cannot save a new config") + + funct.logging(serv, "add_nginx.py add new %s" % config_name) + + MASTERS = sql.is_master(serv) + for master in MASTERS: + if master[0] is not None: + slave_output = funct.upload_and_restart(master[0], cfg, nginx=1, config_file_name=config_file_name) + + slave_output = '
' + master[1] + ':\n' + slave_output + + output = funct.upload_and_restart(serv, cfg, just_save="save", nginx=1, config_file_name=config_file_name) + + output = '
' + server_name + ':\n' + output + output = output + slave_output + if output: + print(output) + else: + print(config_name) + + except Exception: + pass +else: + print(config_add) diff --git a/app/templates/add_nginx.html b/app/templates/add_nginx.html new file mode 100644 index 00000000..37354624 --- /dev/null +++ b/app/templates/add_nginx.html @@ -0,0 +1,97 @@ +{% extends "base.html" %} +{% block content %} +{% from 'include/input_macros.html' import input, checkbox, select %} +{% set balance_params = dict() %} +{% set balance_params = {'ip_hash':'ip_hash','least_conn':'least_conn','random':'random'} %} + +
+ + + {% include 'include/add_nginx_proxy.html' %} +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Add upstream

Select a server: + +
Note: If you re-configure the master server, the slave server will be re-configured automatically
+
+ The upstream module is used to define groups of servers. +

+ Defines a group of servers. Servers can listen on different ports. In addition, servers listening on TCP and UNIX-domain sockets can be mixed.. +

+ By default, requests are distributed between the servers using a weighted round-robin balancing method. +
Name: + {{ input('name', name='upstream', title="Name upstream", placeholder="backend_servers", required='required') }} +
Balance: + {{ select('balance', values=balance_params, selected='least_conn', required='required', class='force_close') }} +
Keepalive: + {{ input('name', name='keepalive', title="Activates the cache for connections to upstream servers.", placeholder="32") }} +
Servers: + {% include 'include/add_nginx_servers.html' %} +
+ + +
+ Add Upstream + + Generate config +
+
+
+ + + +
+ +{% endblock %} diff --git a/app/templates/base.html b/app/templates/base.html index 18ae05ee..e399268e 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,7 +1,7 @@ {{title}} - + @@ -56,12 +56,12 @@ logo - - + +