Compare commits
10 commits
488ad959c0
...
8098b2bf83
| Author | SHA1 | Date | |
|---|---|---|---|
| 8098b2bf83 | |||
| d73ac7e66a | |||
| 0c149683ff | |||
| e4905c9769 | |||
| 65111f67ae | |||
| 97a2ac247a | |||
| 794564c8cc | |||
| 12116ce3c5 | |||
| 0839729105 | |||
| 80dca39117 |
22 changed files with 622 additions and 174 deletions
|
|
@ -7,7 +7,7 @@ from paramecio2.libraries.db.coreforms import SelectForm, SelectModelForm, Hidde
|
||||||
from paramecio2.libraries.mtemplates import PTemplate, env_theme
|
from paramecio2.libraries.mtemplates import PTemplate, env_theme
|
||||||
from paramecio2.libraries import datetime
|
from paramecio2.libraries import datetime
|
||||||
from paramecio2.libraries.urls import make_media_url
|
from paramecio2.libraries.urls import make_media_url
|
||||||
from modules.monit.models.monit import Server, ServerData, Alerts
|
#from modules.monit.models.monit import Server, ServerData, Alerts
|
||||||
from modules.pastafari2.libraries.scandir import scandir
|
from modules.pastafari2.libraries.scandir import scandir
|
||||||
from paramecio2.libraries.db.webmodel import WebModel
|
from paramecio2.libraries.db.webmodel import WebModel
|
||||||
from paramecio2.libraries.lists import AjaxList
|
from paramecio2.libraries.lists import AjaxList
|
||||||
|
|
@ -224,7 +224,7 @@ def pastafari2_add_server_task():
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
ssh_port='22'
|
||||||
|
|
||||||
|
|
||||||
#make ping to server
|
#make ping to server
|
||||||
|
|
@ -233,6 +233,10 @@ def pastafari2_add_server_task():
|
||||||
error=1
|
error=1
|
||||||
error_form['#server_host_error']=I18n.lang('pastafari2', 'error_hostname', 'Error: you need enter a valid hostname')
|
error_form['#server_host_error']=I18n.lang('pastafari2', 'error_hostname', 'Error: you need enter a valid hostname')
|
||||||
|
|
||||||
|
if server_username=='':
|
||||||
|
error=1
|
||||||
|
error_form['#server_username_error']=I18n.lang('pastafari2', 'error_username', 'Error: you need enter a valid username for the server')
|
||||||
|
|
||||||
txt_error=''
|
txt_error=''
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
@ -252,7 +256,9 @@ def pastafari2_add_server_task():
|
||||||
arr_group=server_group.set_conditions('WHERE id=%s', [group_id]).select_a_row_where()
|
arr_group=server_group.set_conditions('WHERE id=%s', [group_id]).select_a_row_where()
|
||||||
group_name=arr_group['code_group']
|
group_name=arr_group['code_group']
|
||||||
|
|
||||||
data={'ssh_user': ssh_user, 'pub_key': public_key, 'url_stats': config.domain_url+url_for('monit_app.monit_get_data', api_key=config.monit_api_key), 'hostname': server_host, 'ip': ip, 'group_id': group_id, 'group_name': group_name}
|
# 'url_stats': config.domain_url+url_for('monit_app.monit_get_data', api_key=config.monit_api_key)
|
||||||
|
|
||||||
|
data={'ssh_user': ssh_user, 'pub_key': public_key, 'hostname': server_host, 'ip': ip, 'group_id': group_id, 'group_name': group_name}
|
||||||
|
|
||||||
with SSHTask(server_host, db, remote_user=server_username, remote_password=server_password, private_key=private_key, remote_path=remote_path, task_id=task_id, data=data, port=ssh_port) as ssh_task:
|
with SSHTask(server_host, db, remote_user=server_username, remote_password=server_password, private_key=private_key, remote_path=remote_path, task_id=task_id, data=data, port=ssh_port) as ssh_task:
|
||||||
if not ssh_task.prepare_connection():
|
if not ssh_task.prepare_connection():
|
||||||
|
|
|
||||||
|
|
@ -480,7 +480,7 @@ class Task:
|
||||||
#self.task.conditions=['WHERE id=%s', [self.id]]
|
#self.task.conditions=['WHERE id=%s', [self.id]]
|
||||||
#self.task.update({'error': 1, 'status': 1})
|
#self.task.update({'error': 1, 'status': 1})
|
||||||
|
|
||||||
self.logtask.insert({'task_id': self.id, 'progress': 100, 'message': 'Malformed json code: '+str(line), 'error': 1, 'status': 1, 'server': self.server})
|
self.logtask.insert({'task_id': self.id, 'progress': 100, 'message': 'Malformed json code: '+str(line).strip(), 'error': 1, 'status': 1, 'server': self.server})
|
||||||
self.make_error_task()
|
self.make_error_task()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
@ -511,7 +511,7 @@ class Task:
|
||||||
#self.task.conditions=['WHERE id=%s', [self.id]]
|
#self.task.conditions=['WHERE id=%s', [self.id]]
|
||||||
#self.task.update({'error': 0, 'status':0})
|
#self.task.update({'error': 0, 'status':0})
|
||||||
|
|
||||||
self.logtask.insert({'task_id': self.id, 'progress': 0, 'no_progress': 1, 'message': str(line), 'error': 0, 'status': 0, 'server': self.server})
|
self.logtask.insert({'task_id': self.id, 'progress': 0, 'no_progress': 1, 'message': str(line).strip(), 'error': 0, 'status': 0, 'server': self.server})
|
||||||
|
|
||||||
#return False
|
#return False
|
||||||
|
|
||||||
|
|
|
||||||
7
media/js/Chart.min.js
vendored
Normal file
7
media/js/Chart.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
media/js/luxon.min.js
vendored
Normal file
1
media/js/luxon.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -204,7 +204,7 @@ class Task(WebModel):
|
||||||
return False
|
return False
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#q = Queue(connection=Redis())
|
q = Queue(connection=Redis())
|
||||||
|
|
||||||
if yes_parent:
|
if yes_parent:
|
||||||
arr_task=self.select_a_row(task_id)
|
arr_task=self.select_a_row(task_id)
|
||||||
|
|
@ -225,21 +225,23 @@ class Task(WebModel):
|
||||||
final_sql=sql_insert+", ".join(sql_insert_values)
|
final_sql=sql_insert+", ".join(sql_insert_values)
|
||||||
|
|
||||||
self.query(final_sql)
|
self.query(final_sql)
|
||||||
"""
|
|
||||||
with self.query('select id from task WHERE parent_id=%s', [task_id]) as cursor:
|
with self.query('select id from task WHERE parent_id=%s', [task_id]) as cursor:
|
||||||
|
|
||||||
for row in cursor:
|
for row in cursor:
|
||||||
#print(row)
|
#print(row)
|
||||||
result = q.enqueue(task, row['id'], job_timeout=3600)
|
result = q.enqueue(task, row['id'], job_timeout=3600)
|
||||||
"""
|
else:
|
||||||
|
|
||||||
return self.send_task_to_server()
|
result = q.enqueue(task, task_id, job_timeout=3600)
|
||||||
|
|
||||||
|
#return self.send_task_to_server()
|
||||||
|
|
||||||
#result = q.enqueue(task, task_id, job_timeout=3600)
|
#result = q.enqueue(task, task_id, job_timeout=3600)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# Function for send task to task server
|
# Function for send task to task server if not using rq worker
|
||||||
|
|
||||||
def send_task_to_server(self):
|
def send_task_to_server(self):
|
||||||
|
|
||||||
|
|
@ -340,10 +342,13 @@ def task(task_id):
|
||||||
final_task.exec()
|
final_task.exec()
|
||||||
|
|
||||||
except:
|
except:
|
||||||
|
"""
|
||||||
if conn==None:
|
if not conn:
|
||||||
conn=WebModel.connection()
|
conn=WebModel.connection()
|
||||||
logtask.sqlclass=conn
|
logtask.sqlclass=conn
|
||||||
|
"""
|
||||||
|
logtask=LogTask(conn)
|
||||||
|
logtask.safe_query()
|
||||||
|
|
||||||
logtask.insert({'task_id': task_id, 'progress': 100, 'message': I18n.lang('pastafari', 'error_in_task', 'Error: error in task ')+traceback.format_exc(), 'error': 1, 'status': 1, 'server': server})
|
logtask.insert({'task_id': task_id, 'progress': 100, 'message': I18n.lang('pastafari', 'error_in_task', 'Error: error in task ')+traceback.format_exc(), 'error': 1, 'status': 1, 'server': server})
|
||||||
|
|
||||||
|
|
@ -367,7 +372,7 @@ class LogTask(WebModel):
|
||||||
self.register(IpField('server'))
|
self.register(IpField('server'))
|
||||||
self.register(corefields.DoubleField('progress'))
|
self.register(corefields.DoubleField('progress'))
|
||||||
self.register(corefields.BooleanField('no_progress'))
|
self.register(corefields.BooleanField('no_progress'))
|
||||||
self.register(corefields.TextField('message'))
|
self.register(corefields.LongTextField('message'))
|
||||||
self.register(corefields.BooleanField('error'))
|
self.register(corefields.BooleanField('error'))
|
||||||
self.register(corefields.BooleanField('status'))
|
self.register(corefields.BooleanField('status'))
|
||||||
self.register(ArrayField('data', corefields.CharField('data')))
|
self.register(ArrayField('data', corefields.CharField('data')))
|
||||||
|
|
|
||||||
87
scripts/servers/cvs/files/gitea.service
Normal file
87
scripts/servers/cvs/files/gitea.service
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Gitea (Git with a cup of tea)
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
###
|
||||||
|
# Don't forget to add the database service dependencies
|
||||||
|
###
|
||||||
|
#
|
||||||
|
#Wants=mysql.service
|
||||||
|
#After=mysql.service
|
||||||
|
#
|
||||||
|
#Wants=mariadb.service
|
||||||
|
#After=mariadb.service
|
||||||
|
#
|
||||||
|
#Wants=postgresql.service
|
||||||
|
#After=postgresql.service
|
||||||
|
#
|
||||||
|
#Wants=memcached.service
|
||||||
|
#After=memcached.service
|
||||||
|
#
|
||||||
|
#Wants=redis.service
|
||||||
|
#After=redis.service
|
||||||
|
#
|
||||||
|
###
|
||||||
|
# If using socket activation for main http/s
|
||||||
|
###
|
||||||
|
#
|
||||||
|
#After=gitea.main.socket
|
||||||
|
#Requires=gitea.main.socket
|
||||||
|
#
|
||||||
|
###
|
||||||
|
# (You can also provide gitea an http fallback and/or ssh socket too)
|
||||||
|
#
|
||||||
|
# An example of /etc/systemd/system/gitea.main.socket
|
||||||
|
###
|
||||||
|
##
|
||||||
|
## [Unit]
|
||||||
|
## Description=Gitea Web Socket
|
||||||
|
## PartOf=gitea.service
|
||||||
|
##
|
||||||
|
## [Socket]
|
||||||
|
## Service=gitea.service
|
||||||
|
## ListenStream=<some_port>
|
||||||
|
## NoDelay=true
|
||||||
|
##
|
||||||
|
## [Install]
|
||||||
|
## WantedBy=sockets.target
|
||||||
|
##
|
||||||
|
###
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
|
||||||
|
# LimitNOFILE=524288:524288
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User=gitea
|
||||||
|
Group=gitea
|
||||||
|
WorkingDirectory=/var/lib/gitea/
|
||||||
|
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
|
||||||
|
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
|
||||||
|
#RuntimeDirectory=gitea
|
||||||
|
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
|
||||||
|
Restart=always
|
||||||
|
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
|
||||||
|
WatchdogSec=30s
|
||||||
|
# If you install Git to directory prefix other than default PATH (which happens
|
||||||
|
# for example if you install other versions of Git side-to-side with
|
||||||
|
# distribution version), uncomment below line and add that prefix to PATH
|
||||||
|
# Don't forget to place git-lfs binary on the PATH below if you want to enable
|
||||||
|
# Git LFS support
|
||||||
|
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
|
# If you want to bind Gitea to a port below 1024, uncomment
|
||||||
|
# the two values below, or use socket activation to pass Gitea its ports as above
|
||||||
|
###
|
||||||
|
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||||
|
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
###
|
||||||
|
# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to
|
||||||
|
# set the following value to false to allow capabilities to be applied on gitea process. The following
|
||||||
|
# value if set to true sandboxes gitea service and prevent any processes from running with privileges
|
||||||
|
# in the host user namespace.
|
||||||
|
###
|
||||||
|
#PrivateUsers=false
|
||||||
|
###
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
190
scripts/servers/cvs/install_gitea.py
Normal file
190
scripts/servers/cvs/install_gitea.py
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
#!/opt/pythonenv/bin/python3 -u
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
import subprocess
|
||||||
|
import argparse
|
||||||
|
import platform
|
||||||
|
import shutil
|
||||||
|
import pathlib
|
||||||
|
import distro
|
||||||
|
import pwd
|
||||||
|
import getpass
|
||||||
|
import re
|
||||||
|
import platform
|
||||||
|
|
||||||
|
#import pymysql.cursors
|
||||||
|
#pymysql.install_as_MySQLdb
|
||||||
|
|
||||||
|
pyv=platform.python_version_tuple()
|
||||||
|
|
||||||
|
if pyv[0]!='3':
|
||||||
|
print('Need python 3 for execute this script')
|
||||||
|
sys.exit(1)
|
||||||
|
"""
|
||||||
|
parser = argparse.ArgumentParser(description='Script for create a Gitea site.')
|
||||||
|
|
||||||
|
parser.add_argument('--domain', help='The domain where is the site', required=True)
|
||||||
|
parser.add_argument('--home_user', help='The name of the new user', required=True)
|
||||||
|
parser.add_argument('--user', help='The name of the domain user', required=True)
|
||||||
|
parser.add_argument('--path', help='The path of the gitea install')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
"""
|
||||||
|
|
||||||
|
linux_distro=distro.id()
|
||||||
|
"""
|
||||||
|
home_user=args.home_user
|
||||||
|
|
||||||
|
if home_user.find('/', -1)==-1:
|
||||||
|
print("Error: you need backslash in home_user option")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
user=args.user
|
||||||
|
"""
|
||||||
|
|
||||||
|
apache_cmd='apache2'
|
||||||
|
apachectl='apache2ctl'
|
||||||
|
|
||||||
|
if linux_distro!='debian' and linux_distro!='ubuntu':
|
||||||
|
|
||||||
|
apache_cmd='httpd'
|
||||||
|
apachectl='apachectl'
|
||||||
|
|
||||||
|
if linux_distro=='rocky' or linux_distro=='fedora':
|
||||||
|
apache_group='apache'
|
||||||
|
|
||||||
|
if linux_distro=='arch':
|
||||||
|
apache_group='http'
|
||||||
|
|
||||||
|
system_user=getpass.getuser()
|
||||||
|
"""
|
||||||
|
path='/'
|
||||||
|
|
||||||
|
if args.path:
|
||||||
|
|
||||||
|
if args.path.find('/', -1)==-1:
|
||||||
|
print("Error: you need backslash in path option")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
path=args.path[:-1]
|
||||||
|
|
||||||
|
if path=='':
|
||||||
|
path='/'
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
print("Downloading gitea binary...")
|
||||||
|
|
||||||
|
arch_cpu=platform.uname().machine
|
||||||
|
|
||||||
|
if arch_cpu!='aarch64' and arch_cpu!='x86_64':
|
||||||
|
print("Error, {} is not supported\n".format(arch_cpu))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# aarch64 x86_64 only
|
||||||
|
|
||||||
|
#sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/1.20/gitea-1.20-linux-amd64 && sudo mv /tmp/gitea /usr/local/bin
|
||||||
|
#curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest | grep 'browser_download_url' | cut -d\" -f4 | grep 'linux-amd64$'
|
||||||
|
|
||||||
|
archs={}
|
||||||
|
|
||||||
|
archs['aarch64']='arm64'
|
||||||
|
archs['x86_64']='amd64'
|
||||||
|
|
||||||
|
if os.path.isfile('/usr/local/bin/gitea'):
|
||||||
|
print("Error, an installation of gitea exists, please, delete old installation\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
#get_url_last_version="wget -O /tmp/gitea `curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest | grep 'browser_download_url' | cut -d '\"' -f4 | grep 'linux-{}$'` && sudo mv /tmp/gitea /usr/local/bin && sudo useradd -m -s /bin/bash gitea && chmod +x /usr/local/bin/gitea".format(archs[arch_cpu])
|
||||||
|
|
||||||
|
# curl -o file.pdf https://your-domain-name/long-file-name.pdf
|
||||||
|
# wget -O /tmp/gitea https://dl.gitea.com/gitea/$GITEA_VERSION/gitea-$GITEA_VERSION-linux-{} &&\
|
||||||
|
|
||||||
|
get_url_last_version="curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest | grep 'browser_download_url' | cut -d '\"' -f4 | grep 'linux-{}$' | grep -Eo '[0-9]\.[0-9]+\.[0-9]+' | head -1".format(archs[arch_cpu])
|
||||||
|
|
||||||
|
print("Downloading and installing Gitea...\n")
|
||||||
|
|
||||||
|
#if subprocess.call(get_url_last_version, shell=True) > 0:
|
||||||
|
|
||||||
|
proc=subprocess.Popen(get_url_last_version, shell=True, stdout=subprocess.PIPE)
|
||||||
|
|
||||||
|
if proc.returncode:
|
||||||
|
print("Error, cannot download the last version for Gitea\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
gitea_version=proc.stdout.read().decode('UTF-8').strip()
|
||||||
|
|
||||||
|
download_gitea="wget -O /tmp/gitea https://dl.gitea.com/gitea/{}/gitea-{}-linux-{} &&\
|
||||||
|
sudo mv /tmp/gitea /usr/local/bin && \
|
||||||
|
sudo useradd -m -s /bin/bash gitea && chmod +x /usr/local/bin/gitea".format(gitea_version, gitea_version, archs[arch_cpu])
|
||||||
|
|
||||||
|
print("Downloading Gitea...\n")
|
||||||
|
|
||||||
|
if subprocess.call(download_gitea, shell=True) > 0:
|
||||||
|
print("Error, cannot the last version for Gitea\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print("Creating directory system for Gitea..\n")
|
||||||
|
|
||||||
|
dir_gitea="sudo mkdir -p /var/lib/gitea/{custom,data,log} && sudo chown -R gitea:gitea /var/lib/gitea/ && sudo chmod -R 750 /var/lib/gitea/ && sudo mkdir /etc/gitea && sudo chown root:gitea /etc/gitea && sudo chmod 770 /etc/gitea"
|
||||||
|
|
||||||
|
if subprocess.call(dir_gitea, shell=True) > 0:
|
||||||
|
print("Error, cannot create the directories for Gitea\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print("Creating the Systemd service for GITEA...")
|
||||||
|
|
||||||
|
# && sudo systemctl enable --now gitea
|
||||||
|
|
||||||
|
"""
|
||||||
|
if subprocess.call('sudo wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service -P /etc/systemd/system/'), shell=True) > 0:
|
||||||
|
print("Error, cannot create the service for Gitea\n")
|
||||||
|
sys.exit(1)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if subprocess.call('sudo cp modules/pastafari2/scripts/servers/cvs/files/gitea.service /etc/systemd/system/ && sudo systemctl start gitea && sudo systemctl enable gitea', shell=True) > 0:
|
||||||
|
print("Error, cannot create and run the service for Gitea\n")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
"""
|
||||||
|
base_name_file='{}-{}.conf'.format(args.domain, name)
|
||||||
|
|
||||||
|
name_file='/home/{}/{}-{}.conf'.format(system_user, args.domain, name)
|
||||||
|
|
||||||
|
with open(name_file, 'w') as f:
|
||||||
|
|
||||||
|
f.write("<Location %s>\n" % path)
|
||||||
|
#ProxyPass unix:/home/root/flask_rest/flaskrest.sock|http://127.0.0.1/
|
||||||
|
f.write("ProxyPass http://127.0.0.1:3000/\n")
|
||||||
|
f.write("ProxyPassReverse http://127.0.0.1:3000/\n")
|
||||||
|
f.write("</Location>\n")
|
||||||
|
|
||||||
|
if path=='/':
|
||||||
|
|
||||||
|
f.write("<Location %s.well-known/acme-challenge/>\n" % path)
|
||||||
|
f.write("ProxyPass !\n")
|
||||||
|
f.write("</Location>\n")
|
||||||
|
|
||||||
|
print('Updating apache configuration for wordpress outside of htdocs...')
|
||||||
|
if subprocess.call('sudo mv {} /etc/{}/vhosts.d/extra && sudo chown root:root /etc/{}/vhosts.d/extra/{}'.format(name_file, apache_cmd, apache_cmd, base_name_file), shell=True) > 0:
|
||||||
|
print('Error')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print("Preparing apache for use proxy http...")
|
||||||
|
|
||||||
|
if linux_distro=='debian' or linux_distro=='ubuntu':
|
||||||
|
if subprocess.call('sudo a2enmod proxy_http', shell=True) > 0:
|
||||||
|
print("Error: cannot enable proxy_http in apache in debian/ubuntu distro")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
service=args.domain+'-'+name
|
||||||
|
|
||||||
|
if subprocess.call("sudo systemctl enable %s && sudo systemctl start %s && sudo systemctl restart %s" % (service, service, apache_cmd), shell=True) > 0:
|
||||||
|
print("Error: cannot update and restart apache")
|
||||||
|
sys.exit(1)
|
||||||
|
"""
|
||||||
|
|
||||||
|
print("Gitea installed successfully! You can access via :3000 http port")
|
||||||
|
|
||||||
|
|
@ -107,7 +107,7 @@ sudo /opt/certbot/bin/pip install --upgrade pip
|
||||||
|
|
||||||
sudo /opt/certbot/bin/pip install certbot certbot
|
sudo /opt/certbot/bin/pip install certbot certbot
|
||||||
|
|
||||||
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
|
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/cron.d/certbot > /dev/null
|
||||||
|
|
||||||
sudo ln -sf /opt/certbot/bin/certbot /usr/bin/certbot
|
sudo ln -sf /opt/certbot/bin/certbot /usr/bin/certbot
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ import distro
|
||||||
parser = argparse.ArgumentParser(description='A script for install leviathan user')
|
parser = argparse.ArgumentParser(description='A script for install leviathan user')
|
||||||
|
|
||||||
#parser.add_argument('--url', help='The url where notify updates', required=True)
|
#parser.add_argument('--url', help='The url where notify updates', required=True)
|
||||||
parser.add_argument('--url_stats', help='The url where pastafaristats notify the stats', required=True)
|
#parser.add_argument('--url_stats', help='The url where pastafaristats notify the stats', required=True)
|
||||||
parser.add_argument('--user', help='The user for pastafari', required=True)
|
parser.add_argument('--user', help='The user for pastafari', required=True)
|
||||||
parser.add_argument('--pub_key', help='The pub key used in pastafari user', required=True)
|
parser.add_argument('--pub_key', help='The pub key used in pastafari user', required=True)
|
||||||
parser.add_argument('--group', help='Server group', required=False)
|
parser.add_argument('--group', help='Server group', required=False)
|
||||||
|
|
@ -38,7 +38,7 @@ print('{"error": 0, "status": 0, "progress": 0, "no_progress":0, "message": "Ins
|
||||||
|
|
||||||
#check_url.match(args.url) and
|
#check_url.match(args.url) and
|
||||||
|
|
||||||
if check_url.match(args.url_stats):
|
#if check_url.match(args.url_stats):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
u=pwd.getpwnam(args.user)
|
u=pwd.getpwnam(args.user)
|
||||||
|
|
@ -172,8 +172,10 @@ if check_url.match(args.url_stats):
|
||||||
print('Error, cannot add utilities for archlinux')
|
print('Error, cannot add utilities for archlinux')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
"""
|
||||||
else:
|
else:
|
||||||
|
|
||||||
print('Error installing the module, not valid url')
|
print('Error installing the module, not valid url')
|
||||||
|
|
||||||
exit(1)
|
exit(1)
|
||||||
|
"""
|
||||||
|
|
|
||||||
80
scripts/system/ssh/change_ssh_port.py
Normal file
80
scripts/system/ssh/change_ssh_port.py
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
#!/opt/pythonenv/bin/python3 -u
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import argparse
|
||||||
|
import platform
|
||||||
|
import distro
|
||||||
|
import os
|
||||||
|
|
||||||
|
pyv=platform.python_version_tuple()
|
||||||
|
|
||||||
|
if pyv[0]!='3':
|
||||||
|
print('Need python 3 for execute this script')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Script for ssh port of the server.')
|
||||||
|
|
||||||
|
parser.add_argument('--ssh_port', help='The new ssh port', required=True)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
linux_distro=distro.id()
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
ssh_port=int(args.ssh_port)
|
||||||
|
|
||||||
|
except:
|
||||||
|
|
||||||
|
print('{"error": 1, "status": 1, "progress": 100, "no_progress":0, "message": "Error: wrong port value"}')
|
||||||
|
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
print('Changing ssh port...')
|
||||||
|
|
||||||
|
#sudo su -s /bin/bash -c ' echo "Port=%i" > /etc/ssh/sshd_config.d/port.conf' % ssh_port
|
||||||
|
|
||||||
|
#if subprocess.call('sudo echo "Port=%i" > /etc/ssh/sshd_config.d/port.conf' % ssh_port, shell=True) > 0:
|
||||||
|
if os.path.isfile('/etc/sshd_config.d/port.conf'):
|
||||||
|
if subprocess.call("sudo cp /etc/sshd_config.d/port.conf /etc/sshd_config.d/port.conf.bak", shell=True) > 0:
|
||||||
|
print('Error: cannot save the old sshd configuration')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if subprocess.call("sudo su -s /bin/bash -c ' echo \"Port=%i\" > /etc/ssh/sshd_config.d/port.conf'" % ssh_port, shell=True) > 0:
|
||||||
|
|
||||||
|
#print('{"error": 1, "status": 1, "progress": 100, "no_progress":0, "message": "Error: cannot save the new sshd configuration'+('sudo echo "Port=%i" > /etc/ssh/sshd_config.d/port.conf' % ssh_port)+'"}')
|
||||||
|
print('Error: cannot save the new sshd configuration sudo echo "Port=%i" > /etc/ssh/sshd_config.d/port.conf\n' % ssh_port)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if linux_distro=='fedora' or linux_distro=='centos' or linux_distro=='almalinux' or linux_distro=='rocky':
|
||||||
|
if subprocess.call("sudo getenforce", shell=True)==0:
|
||||||
|
if subprocess.call("sudo semanage port -a -t ssh_port_t -p tcp %s" % ssh_port, shell=True) > 0:
|
||||||
|
print('WARNING: probably the port is open for ssh in selinux\n')
|
||||||
|
#sys.exit(1)
|
||||||
|
|
||||||
|
if subprocess.call("sudo systemctl status firewalld", shell=True)==0:
|
||||||
|
if subprocess.call("sudo firewall-cmd --add-port=%s/tcp --permanent && sudo firewall-cmd --reload" % ssh_port, shell=True) > 0:
|
||||||
|
print('Error, cannot set firewall services for sshd...\n')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if subprocess.call("sudo systemctl restart sshd", shell=True) > 0:
|
||||||
|
|
||||||
|
#Fallout to
|
||||||
|
#print('{"error": 1, "status": 1, "progress": 100, "no_progress":0, "message": "Error: cannot save the new sshd configuration'+('sudo echo "Port=%i" > /etc/ssh/sshd_config.d/port.conf' % ssh_port)+'"}')
|
||||||
|
|
||||||
|
print('Error: cannot restart new sshd configuration!, dangerous!\n')
|
||||||
|
print('Restarting sshd with old value...')
|
||||||
|
|
||||||
|
if os.path.isfile('/etc/sshd_config.d/port.conf.bak'):
|
||||||
|
if subprocess.call("sudo cp /etc/sshd_config.d/port.conf.bak /etc/sshd_config.d/port.conf", shell=True) > 0:
|
||||||
|
print('Error: cannot get the old sshd configuration for restaure old port!, deleting old configuration and opening port 22!\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if subprocess.call("sudo rm -f /etc/sshd_config.d/port.conf && sudo systemctl restart sshd", shell=True) > 0:
|
||||||
|
print('Error: cannot delete configuration and restart sshd!!\n')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print('{"error": 0, "status": 0, "progress": 100, "no_progress":0, "message": "Done: changed the ssh port value..."}')
|
||||||
|
|
@ -51,7 +51,7 @@ def execute_script(task_id, executable='launcher.py'):
|
||||||
|
|
||||||
return_value=proc.returncode
|
return_value=proc.returncode
|
||||||
|
|
||||||
if return_value>0:
|
if return_value!=0:
|
||||||
connection=WebModel.connection()
|
connection=WebModel.connection()
|
||||||
|
|
||||||
if executable=='launcher.py':
|
if executable=='launcher.py':
|
||||||
|
|
|
||||||
0
tasks/servers/cvs/gitea/__init__.py
Normal file
0
tasks/servers/cvs/gitea/__init__.py
Normal file
52
tasks/servers/cvs/gitea/gitea.py
Normal file
52
tasks/servers/cvs/gitea/gitea.py
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/opt/pythonenv/python3
|
||||||
|
|
||||||
|
from modules.pastafari2.libraries.task import Task
|
||||||
|
from modules.pastafari2.models.pastafari2 import ServerDbTask, ServerGroup
|
||||||
|
from modules.pastafari2.libraries.configtask import config_task
|
||||||
|
from settings import config
|
||||||
|
from paramecio2.libraries.urls import make_url
|
||||||
|
|
||||||
|
try:
|
||||||
|
from modules.gitea.models.gitea import GiteaServer
|
||||||
|
server_db=True
|
||||||
|
except:
|
||||||
|
server_db=False
|
||||||
|
|
||||||
|
class ServerTask(Task):
|
||||||
|
|
||||||
|
def __init__(self, server, conn, remote_user='root', remote_password='', private_key='./ssh/id_rsa', password_key='', remote_path='pastafari2', task_id=0, data={}, port=22):
|
||||||
|
|
||||||
|
super().__init__(server, conn, remote_user, remote_password, private_key, password_key, remote_path, task_id, data, port)
|
||||||
|
|
||||||
|
self.name_task='Install Gitea in a server'
|
||||||
|
|
||||||
|
self.description_task='Install Gitea in a server standalone, without proxy.'
|
||||||
|
|
||||||
|
self.codename_task='gitea_server_standalone'
|
||||||
|
|
||||||
|
#self.files=[['modules/pastafari2/scripts/system/alive.sh', 0o755]]
|
||||||
|
|
||||||
|
self.files=[['modules/pastafari2/scripts/servers/cvs/install_gitea.py', 0o755], ['modules/pastafari2/scripts/servers/cvs/files/gitea.service', 0o644]]
|
||||||
|
|
||||||
|
self.commands_to_execute=[['modules/pastafari2/scripts/servers/cvs/install_gitea.py', '']]
|
||||||
|
|
||||||
|
self.one_time=True
|
||||||
|
|
||||||
|
self.version='1.0'
|
||||||
|
|
||||||
|
|
||||||
|
def post_task(self):
|
||||||
|
|
||||||
|
if server_db:
|
||||||
|
dbserver=GiteaServer(self.connection)
|
||||||
|
|
||||||
|
dbserver.safe_query()
|
||||||
|
|
||||||
|
serverdb=ServerDbTask(self.connection)
|
||||||
|
|
||||||
|
arr_server=serverdb.set_conditions('WHERE ip=%s', [self.server]).select_a_row_where()
|
||||||
|
|
||||||
|
if arr_server:
|
||||||
|
dbserver.insert({'server_id': arr_server['id']})
|
||||||
|
|
||||||
|
return True
|
||||||
7
tasks/servers/cvs/info.cfg
Normal file
7
tasks/servers/cvs/info.cfg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[info]
|
||||||
|
name=CVS servers
|
||||||
|
description=Install CVS servers
|
||||||
|
|
||||||
|
[modules]
|
||||||
|
gitea/gitea=Install Gitea
|
||||||
|
|
||||||
|
|
@ -60,14 +60,14 @@ class ServerTask(Task):
|
||||||
|
|
||||||
if arr_server:
|
if arr_server:
|
||||||
#dbserver.insert({'server_id': arr_server['id'], 'access_ip': self.data['ip']})
|
#dbserver.insert({'server_id': arr_server['id'], 'access_ip': self.data['ip']})
|
||||||
server.query('update serverdbtask set ssh_port=%s WHERE id=%s', [arr_server['id']])
|
serverdb.query('update serverdbtask set ssh_port=%s WHERE id=%s', [self.data['ssh_port'], arr_server['id']])
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def pre_task(self):
|
def pre_task(self):
|
||||||
|
|
||||||
self.commands_to_execute=[['modules/pastafari2/scripts/system/ssh/change_ssh_port.py', '--port=%s' % (self.data['ssh_port'])]]
|
self.commands_to_execute=[['modules/pastafari2/scripts/system/ssh/change_ssh_port.py', '--ssh_port=%s' % (self.data['ssh_port'])]]
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,10 @@ class ServerTask(Task):
|
||||||
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_php.py', ''])
|
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_php.py', ''])
|
||||||
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_unixutils.sh', ''])
|
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_unixutils.sh', ''])
|
||||||
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_psutil.sh', ''])
|
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_psutil.sh', ''])
|
||||||
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_pzoo_stats.py', '--user='+self.data['ssh_user']+' --pub_key='+self.data['pub_key']+' --url_stats='+self.data['url_stats']+' --group="'+self.data['group_name']+'" --path='+remote_path])
|
|
||||||
|
#' --url_stats='+self.data['url_stats']+
|
||||||
|
|
||||||
|
self.commands_to_execute.append(['modules/pastafari2/scripts/system/install_pzoo_stats.py', '--user='+self.data['ssh_user']+' --pub_key='+self.data['pub_key']+' --group="'+self.data['group_name']+'" --path='+remote_path])
|
||||||
|
|
||||||
def post_task(self):
|
def post_task(self):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
<form method="post" name="add_server" id="add_server_form">
|
<form method="post" name="add_server" id="add_server_form">
|
||||||
<p>Please fill the form for add the new server to the system.</p>
|
<p>Please fill the form for add the new server to the system.</p>
|
||||||
<p><label>${lang('pastafari2', 'server_host', 'Server host')}* <span class="pastafari2_error error" id="server_host_error"></span></label> <input type="text" name="server_host" value=""></p>
|
<p><label>${lang('pastafari2', 'server_host', 'Server host')}* <span class="pastafari2_error error" id="server_host_error"></span></label> <input type="text" name="server_host" value=""></p>
|
||||||
<p><label>${lang('pastafari2', 'server_group', 'Server group')} <span class="pastafari2_error error" id="group_id_error"></span></label> ${group_form.form()|n}</p>
|
<p><label>${lang('pastafari2', 'server_group', 'Server group')}* <span class="pastafari2_error error" id="group_id_error"></span></label> ${group_form.form()|n}</p>
|
||||||
<p><label>${lang('pastafari2', 'server_username', 'Server username')} <span class="pastafari2_error error" id="server_username_error"></span></label> <input type="text" name="server_username" value=""></p>
|
<p><label>${lang('pastafari2', 'server_username', 'Server username')}* <span class="pastafari2_error error" id="server_username_error"></span></label> <input type="text" name="server_username" value=""></p>
|
||||||
<p><label>${lang('pastafari2', 'server_password', 'Server password.')} <span class="pastafari2_error error" id="server_password_error"></span></label> <input type="password" name="server_password" value=""></p>
|
<p><label>${lang('pastafari2', 'server_password', 'Server password.')} <span class="pastafari2_error error" id="server_password_error"></span></label> <input type="password" name="server_password" value=""></p>
|
||||||
<p><label>${lang('pastafari2', 'repeat_server_password', 'Repeat server password')} <span class="pastafari2_error error" id="repeat_server_password_error"></span></label> <input type="password" name="repeat_server_password" value=""></p>
|
<p><label>${lang('pastafari2', 'repeat_server_password', 'Repeat server password')} <span class="pastafari2_error error" id="repeat_server_password_error"></span></label> <input type="password" name="repeat_server_password" value=""></p>
|
||||||
<p><label>${lang('pastafari2', 'ssh_port', 'SSH port')}* <span class="pastafari2_error error" id="ssh_port_error"></span></label> <input type="number" name="ssh_port" value="22"></p>
|
<p><label>${lang('pastafari2', 'ssh_port', 'SSH port')}* <span class="pastafari2_error error" id="ssh_port_error"></span></label> <input type="number" name="ssh_port" value="22"></p>
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<p><a href="${url_for('.pastafari2_dashboard')}">Servers</a> >> ${lang('pastafari2', 'add_server', 'Add server')}</p>
|
<p><a href="${url_for('.pastafari2_dashboard')}">Servers</a> >> ${lang('pastafari2', 'add_server', 'Add server')}</p>
|
||||||
<script type="text/javascript" src="${make_media_url('js/jsutils/posting2.js', 'monit')}"></script>
|
<script type="text/javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||||
<script>
|
<script>
|
||||||
var options={url: "${url_for('.pastafari2_add_server_task')}", loading: '#layer_loading', success: function (data) {
|
var options={url: "${url_for('.pastafari2_add_server_task')}", loading: '#layer_loading', success: function (data) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<%block name="content">
|
<%block name="content">
|
||||||
<div id="principal_container">
|
<div id="principal_container">
|
||||||
<p><a href="${url_for('.pastafari2_add_server')}">${lang('pastafari2', 'add_server', 'Add server')}</a>
|
<p><a href="${url_for('.pastafari2_add_server')}">${lang('pastafari2', 'add_server', 'Add server')}</a>
|
||||||
<p>${lang('monit', 'choose_group', 'Choose group')}:
|
<p>${lang('pastafari2', 'choose_group', 'Choose group')}:
|
||||||
<select name="group_id" id="group_id">
|
<select name="group_id" id="group_id">
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
@ -62,8 +62,8 @@ ${"\n".join(form_set)|n}
|
||||||
</div>
|
</div>
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="jscript_block">
|
<%block name="jscript_block">
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'pastafari2')}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<p><a href="${url_for('.pastafari2_dashboard')}">${lang('pastafari2', 'servers', 'Servers')}</a> >> ${lang('pastafari2', 'delete_server', 'Delete server')}</p>
|
<p><a href="${url_for('.pastafari2_dashboard')}">${lang('pastafari2', 'servers', 'Servers')}</a> >> ${lang('pastafari2', 'delete_server', 'Delete server')}</p>
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="jscript_block">
|
<%block name="jscript_block">
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var options={url: "${url_for('admin_app.pastafari2_delete_server_db')}", loading: '#layer_loading', pre_callback: function (data) {
|
var options={url: "${url_for('admin_app.pastafari2_delete_server_db')}", loading: '#layer_loading', pre_callback: function (data) {
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ ${form|n}
|
||||||
${links|n}
|
${links|n}
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="jscript_block">
|
<%block name="jscript_block">
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'pastafari2')}"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var options={url: "${url_exec|n}", loading: '#layer_loading', success: function (data) {
|
var options={url: "${url_exec|n}", loading: '#layer_loading', success: function (data) {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,14 @@
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#no_progress pre {
|
||||||
|
|
||||||
|
margin-top:2px;
|
||||||
|
margin-bottom:2px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="content">
|
<%block name="content">
|
||||||
|
|
@ -30,7 +38,7 @@ ${return_tree|n}
|
||||||
<hr />
|
<hr />
|
||||||
<i class="fa fa-cog fa-spin fa-5x fa-fw margin-bottom" id="gear"></i>
|
<i class="fa fa-cog fa-spin fa-5x fa-fw margin-bottom" id="gear"></i>
|
||||||
<div id="progressbar"><div class="progress-label">${lang('pastafari2', 'processing_task', 'Processing task...')}</div></div>
|
<div id="progressbar"><div class="progress-label">${lang('pastafari2', 'processing_task', 'Processing task...')}</div></div>
|
||||||
<div id="no_progress" style="border: solid #cbcbcb 1px;height:150px;overflow:scroll;padding:2px;"></div>
|
<div id="no_progress" style="border: solid #cbcbcb 1px;height:550px;overflow:scroll;padding:2px;color: #fbfbfb;background:#000000 !important;font-size:0.8em;"></div>
|
||||||
<p id="return_block"></p>
|
<p id="return_block"></p>
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="jscript_block">
|
<%block name="jscript_block">
|
||||||
|
|
@ -100,7 +108,7 @@ ${return_tree|n}
|
||||||
|
|
||||||
progressbar.progressbar( "value", progress );
|
progressbar.progressbar( "value", progress );
|
||||||
|
|
||||||
$('#no_progress').append(message+'<br />');
|
$('#no_progress').append(message);
|
||||||
|
|
||||||
objDiv.scrollTop = objDiv.scrollHeight;
|
objDiv.scrollTop = objDiv.scrollHeight;
|
||||||
|
|
||||||
|
|
@ -143,7 +151,7 @@ ${return_tree|n}
|
||||||
{
|
{
|
||||||
//yes_progress=0;
|
//yes_progress=0;
|
||||||
//$('#no_progress').append(data[k].message+'<br />');
|
//$('#no_progress').append(data[k].message+'<br />');
|
||||||
update_messages_queue(data[k].message+'<br />');
|
update_messages_queue('<pre>'+data[k].message.trim()+'</pre>');
|
||||||
|
|
||||||
//Scroll
|
//Scroll
|
||||||
|
|
||||||
|
|
@ -152,7 +160,7 @@ ${return_tree|n}
|
||||||
if(data[k].no_progress==0)
|
if(data[k].no_progress==0)
|
||||||
{
|
{
|
||||||
|
|
||||||
update_progress_messages_queue(data[k].message, data[k].progress);
|
update_progress_messages_queue('<pre>'+data[k].message.trim()+'</pre>', data[k].progress);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@
|
||||||
</div>
|
</div>
|
||||||
</%block>
|
</%block>
|
||||||
<%block name="jscript_block">
|
<%block name="jscript_block">
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/ajax_list.js', 'pastafari2')}"></script>
|
||||||
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'monit')}"></script>
|
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
% if not regenerate:
|
% if not regenerate:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue