chore: 完善个模块打包
This commit is contained in:
@@ -5,34 +5,14 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"gitea.loveuer.com/yizhisec/pkg3/logger"
|
||||
"github.com/samber/lo"
|
||||
"yizhisec.com/hsv2/forge/internal/opt"
|
||||
"yizhisec.com/hsv2/forge/pkg/resource"
|
||||
)
|
||||
|
||||
type NginxOpt func(*nginxOpt)
|
||||
|
||||
type nginxOpt struct {
|
||||
WithoutSeafile bool
|
||||
Replica int
|
||||
}
|
||||
|
||||
func WithNginxReplica(replica int) NginxOpt {
|
||||
return func(o *nginxOpt) {
|
||||
if replica >= 0 {
|
||||
o.Replica = replica
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func WithoutNginxSeafile() NginxOpt {
|
||||
return func(o *nginxOpt) {
|
||||
o.WithoutSeafile = true
|
||||
}
|
||||
}
|
||||
|
||||
func (m *maker) AppNginx(ctx context.Context, opts ...NginxOpt) error {
|
||||
func (m *maker) AppNginx(ctx context.Context, version string, vendor string, replica int, inlcudeImage bool) error {
|
||||
const (
|
||||
_upsert = `#!/bin/bash
|
||||
|
||||
@@ -59,31 +39,40 @@ kubectl create configmap ssl-client-server-key --namespace hsv2 --from-file=clie
|
||||
kubectl create configmap ssl-web-server-crt --namespace hsv2 --from-file=web.server.crt=./ssl/web.server.crt --dry-run=client -o yaml | kubectl apply -f -
|
||||
kubectl create configmap ssl-web-server-key --namespace hsv2 --from-file=web.server.key=./ssl/web.server.key --dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
kubectl apply -f nginx.yaml
|
||||
kubectl apply -f deployment.yaml
|
||||
kubectl rollout restart deployment nginx-deployment -n hsv2`
|
||||
)
|
||||
var (
|
||||
err error
|
||||
workdir = filepath.Join(m.workdir, "app", "nginx")
|
||||
o = nginxOpt{
|
||||
WithoutSeafile: false,
|
||||
Replica: 2,
|
||||
}
|
||||
err error
|
||||
workdir = filepath.Join(m.workdir, "app", "nginx")
|
||||
applySeafile = "kubectl create configmap nginx-seafile --namespace hsv2 --from-file=seafile.conf=./conf/seafile.conf --dry-run=client -o yaml | kubectl apply -f -"
|
||||
)
|
||||
|
||||
logger.Info(" ☑️ maker.AppNginx: 开始构建 nginx, workdir = %s", workdir)
|
||||
logger.Info("☑️ maker.AppNginx: 开始构建 nginx, version = %s, vendor = %s, workdir = %s", version, vendor, workdir)
|
||||
|
||||
for _, fn := range opts {
|
||||
fn(&o)
|
||||
}
|
||||
|
||||
logger.Debug(" ☑️ maker.AppNginx: 创建工作目录 = %s", workdir)
|
||||
logger.Debug("☑️ maker.AppNginx: 创建工作目录 = %s", workdir)
|
||||
_ = os.RemoveAll(workdir)
|
||||
if err = os.MkdirAll(workdir, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
logger.Debug("✅ maker.AppNginx: 创建工作目录成功 = %s", workdir)
|
||||
|
||||
if inlcudeImage {
|
||||
logger.Debug("☑️ maker.AppNginx: start pull image = %s", opt.IMAGE_NGINX)
|
||||
if err = m.Image(ctx, opt.IMAGE_NGINX, WithImageSave(filepath.Join(workdir, "nginx.tar"))); err != nil {
|
||||
logger.Debug("❌ maker.AppNginx: 拉取镜像失败: %v", err)
|
||||
return err
|
||||
}
|
||||
logger.Debug("✅ maker.AppNginx: pull image success = %s", opt.IMAGE_NGINX)
|
||||
|
||||
tag := strings.Split(opt.IMAGE_NGINX, ":")[1]
|
||||
logger.Debug("☑️ maker.AppNginx: write tag.txt = %s", tag)
|
||||
if err = os.WriteFile(filepath.Join(workdir, "tag.txt"), []byte(tag), 0644); err != nil {
|
||||
logger.Debug("❌ maker.AppNginx: 写入 tag.txt 失败: %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 子目录: conf 与 ssl
|
||||
confDir := filepath.Join(workdir, "conf")
|
||||
sslDir := filepath.Join(workdir, "ssl")
|
||||
@@ -113,8 +102,8 @@ kubectl rollout restart deployment nginx-deployment -n hsv2`
|
||||
{"common.conf", resource.NGINXCommon},
|
||||
}
|
||||
|
||||
// 过滤 seafile.conf 文件
|
||||
if !o.WithoutSeafile {
|
||||
// vendor != elink, append seafile conf
|
||||
if vendor != "elink" {
|
||||
confFiles = append(confFiles, struct {
|
||||
name string
|
||||
content []byte
|
||||
@@ -157,23 +146,31 @@ kubectl rollout restart deployment nginx-deployment -n hsv2`
|
||||
}
|
||||
|
||||
// write nginx deployment yaml
|
||||
dest := filepath.Join(workdir, "nginx.yaml")
|
||||
content := []byte(fmt.Sprintf(resource.YAMLAppNGINX, o.Replica))
|
||||
dest := filepath.Join(workdir, "deployment.yaml")
|
||||
content := []byte(fmt.Sprintf(resource.YAMLAppNGINX, replica))
|
||||
if err = os.WriteFile(dest, content, 0644); err != nil {
|
||||
logger.Debug("❌ maker.AppNginx: 写入 nginx.yaml 失败: %v", err)
|
||||
logger.Debug("❌ maker.AppNginx: 写入 deployment.yaml 失败: %v", err)
|
||||
return err
|
||||
}
|
||||
logger.Debug("✅ maker.AppNginx: 写入 nginx.yaml 成功, dest = %s", dest)
|
||||
logger.Debug("✅ maker.AppNginx: 写入 deployment.yaml 成功, dest = %s", dest)
|
||||
|
||||
// write nginx upsert script
|
||||
dest = filepath.Join(workdir, "upsert.sh")
|
||||
content = []byte(fmt.Sprintf(_upsert, lo.If(o.WithoutSeafile, "").Else(applySeafile)))
|
||||
if vendor == "elink" {
|
||||
applySeafile = ""
|
||||
}
|
||||
content = []byte(fmt.Sprintf(_upsert, applySeafile))
|
||||
if err = os.WriteFile(dest, content, 0755); err != nil {
|
||||
logger.Debug("❌ maker.AppNginx: 写入 upsert.sh 失败: %v", err)
|
||||
return err
|
||||
}
|
||||
logger.Debug("✅ maker.AppNginx: 写入 upsert.sh 成功, dest = %s", dest)
|
||||
|
||||
logger.Info("✅ maker.AppNginx: nginx 构建完成")
|
||||
if err = os.WriteFile(filepath.Join(workdir, "version.txt"), []byte(version), 0644); err != nil {
|
||||
logger.Debug("❌ maker.AppNginx: 写入 version.txt 失败: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
logger.Info("✅ maker.AppNginx: nginx 构建完成, version = %s, vendor = %s", version, vendor)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user