This commit is contained in:
chendelin1982 2021-09-28 18:34:18 +08:00
parent ba4142e7fe
commit 76c58aabef
12 changed files with 110 additions and 23 deletions

View file

@ -11,4 +11,8 @@
用户同步 stackhub 上已经存放的清单,而不是通过 API 获取。原因: 用户同步 stackhub 上已经存放的清单,而不是通过 API 获取。原因:
1. 避免API使用需要授权或超时 1. 避免API使用需要授权或超时
2. 避免未发布的应用被安装 2. 避免未发布的应用被安装
#### 如何获取所有已占用的端口号?
基于 psutil 模块打印所有端口信息,然后匹配关键词

Binary file not shown.

View file

@ -1,4 +1,5 @@
import model, os import model, os, sys, subprocess
from model import GitOp
path_repo = "./data/application.list" path_repo = "./data/application.list"
path_project = "" path_project = ""
@ -29,14 +30,27 @@ class Create:
self.folder = self.app_name self.folder = self.app_name
def downRepo(self): def downRepo(self):
'''download repository'''
cmd = "git clone --depth=1 " + model.SmoothUrl.res(github_url) + "/websoft9/docker-" + self.app_name + " " + self.folder cmd = "git clone --depth=1 " + model.SmoothUrl.res(github_url) + "/websoft9/docker-" + self.app_name + " " + self.folder
if os.path.exists("./"+self.folder): if os.path.exists("./"+self.folder):
print(os.path.abspath(self.folder)+" folder already exists") print(os.path.abspath(self.folder)+" folder already exists")
sys.exit(0)
else: else:
os.system(cmd) GitOp.gitClone(cmd)
def setEnv(self):
'''set the usable port for application'''
pass
def upRepo(self): def upRepo(self):
'''docker-compose up repository'''
cmd = "docker-compose -f docker-compose-production.yml --env-file .env_all up -d" cmd = "docker-compose -f docker-compose-production.yml --env-file .env_all up -d"
print(cmd) print(cmd)
os.chdir(self.folder) os.chdir(self.folder)
os.system(cmd) os.system(cmd)
def printResult(self):
pass

@ -1 +0,0 @@
Subproject commit 8531fd12cacfb9881de3c270f2b81e17b20f5a99

View file

@ -1 +1 @@
yum install git pwgen jq wget curl figlet boxes -y yum install git wget figlet boxes -y

1
cli/joomla Submodule

@ -0,0 +1 @@
Subproject commit 93735135cf4529fc7830446bb6604f7c15daae2f

View file

@ -1,12 +1,12 @@
import os, io, sys, platform, shutil, urllib3, json, time, subprocess, pprint import os, io, sys, platform, psutil, json, secrets, string
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Type, Union from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Type, Union
import urllib.parse
import urllib.request import urllib.request
class SmoothUrl: class SmoothUrl:
''' get url ''' ''' Get the best smooth url for Git or Download'''
def __init__(self): def __init__(self):
pass pass
@ -14,28 +14,31 @@ class SmoothUrl:
def res(url_list: Tuple): def res(url_list: Tuple):
for item in url_list: for item in url_list:
req = urllib.request.Request(item)
try: try:
urllib.request.urlopen(item,timeout=3).read() urllib.request.urlopen(item,timeout=3).read()
print("Smooth URL is: " + item)
return item return item
except urllib.error.URLError as e: except:
print(e.reason)
continue continue
return None print("Necessary resource URL can not reachable, system exit!")
sys.exit(0)
class GitOp:
class Github: '''Git operation'''
'''Github operation'''
def __init__(self): def __init__(self):
pass pass
def gitClone(): def gitClone(cmd: str):
pass '''git clone'''
try:
print("Command is "+cmd)
os.system(cmd)
except:
print("Git clone failed, try again and check your URL can be accessed")
sys.exit(0)
class FileOp: class FileOp:
'''File operation''' '''File operation'''
@ -45,4 +48,55 @@ class FileOp:
def printJson(path: str): def printJson(path: str):
with open(path,newline='') as file: with open(path,newline='') as file:
print(file.read()) print(file.read())
def convertToJson(path: str):
pass
class NetOp:
'''Network and port manage'''
def __init__(self):
pass
def checkPort(self, port: int):
'''check the target port's status'''
search_key = "port="+str(port)
if str(psutil.net_connections()).find(search_key) != -1:
print(str(port)+" is used")
return False
else:
print(str(port)+" is free")
return True
def setPort(self, port: int):
'''set usable port'''
while self.checkPort(port) == False:
port=port+1
print(port)
return port
class SecurityOp:
'''Password and security operation'''
def __int__(self):
pass
def randomPass(self, length: Optional[int] = 16):
'''set password'''
alphabet = string.ascii_letters + string.digits
while True:
password = ''.join(secrets.choice(alphabet) for i in range(length))
if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
and sum(c.isdigit() for c in password) >= 3):
break
print(password)
test=SecurityOp()
#test.setPort(9001)
test.randomPass(25)

View file

@ -1 +1,3 @@
typer typer
psutil
jq

View file

@ -19,6 +19,13 @@ def create(app_name: str, project_name: Optional[str] = None):
create = controller.Create(app_name, project_name) create = controller.Create(app_name, project_name)
create.downRepo() create.downRepo()
create.upRepo() create.upRepo()
create.setEnv()
create.printResult()
@app.command()
def start(app_name: str, project_name: Optional[str] = None):
'''start one application'''
pass
@app.command() @app.command()
def update(name: str): def update(name: str):

View file

@ -0,0 +1,4 @@
import json
with open("./joomla/.env_all","r") as file:
jsonData = json.dump(file, tempfile)

2
cli/version Normal file
View file

@ -0,0 +1,2 @@
stable: 1.3
compatible: 1.23