mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-24 23:10:13 +08:00
refactor: re-implement kubernetes services with rest client, to lightweight package size
This commit is contained in:
@@ -12,8 +12,6 @@ import (
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
|
||||
typedcore "github.com/certimate-go/certimate/pkg/sdk3rd-trimmed/k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
|
||||
"github.com/certimate-go/certimate/pkg/core"
|
||||
xcert "github.com/certimate-go/certimate/pkg/utils/cert"
|
||||
)
|
||||
@@ -104,10 +102,15 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
}
|
||||
|
||||
// 获取 Secret 实例
|
||||
var secretPayload *k8score.Secret
|
||||
var secretIsNew bool
|
||||
secretPayload, err = client.Secrets(d.config.Namespace).Get(ctx, d.config.SecretName, meta.GetOptions{})
|
||||
if err != nil {
|
||||
secretPayload := &k8score.Secret{}
|
||||
secretIsNew := false
|
||||
secretGetResp := client.Get().
|
||||
Namespace(d.config.Namespace).
|
||||
Resource("secrets").
|
||||
Name(d.config.SecretName).
|
||||
VersionedParams(&meta.GetOptions{}, meta.ParameterCodec).
|
||||
Do(ctx)
|
||||
if err := secretGetResp.Error(); err != nil {
|
||||
if !k8serrs.IsNotFound(err) {
|
||||
return nil, fmt.Errorf("failed to get kubernetes secret: %w", err)
|
||||
}
|
||||
@@ -123,7 +126,10 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
},
|
||||
}
|
||||
secretIsNew = true
|
||||
} else if err := secretGetResp.Into(secretPayload); err != nil {
|
||||
return nil, fmt.Errorf("failed to parse kubernetes secret: %w", err)
|
||||
}
|
||||
d.logger.Debug("kubernetes operate 'Secrets.Get'", slog.String("namespace", d.config.Namespace), slog.Any("secret", d.config.SecretName))
|
||||
|
||||
// 生成 Secret 注解和标签
|
||||
secretAnnotations := map[string]string{
|
||||
@@ -179,15 +185,27 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
|
||||
// 创建或更新 Secret 实例
|
||||
if secretIsNew {
|
||||
secretPayload, err = client.Secrets(d.config.Namespace).Create(ctx, secretPayload, meta.CreateOptions{})
|
||||
d.logger.Debug("kubernetes operate 'Secrets.Create'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload))
|
||||
if err != nil {
|
||||
secretPostResp := client.Post().
|
||||
Namespace(d.config.Namespace).
|
||||
Resource("secrets").
|
||||
Name(d.config.SecretName).
|
||||
VersionedParams(&meta.GetOptions{}, meta.ParameterCodec).
|
||||
Body(secretPayload).
|
||||
Do(ctx)
|
||||
d.logger.Debug("kubernetes operate 'Secrets.Post'", slog.String("namespace", d.config.Namespace), slog.Any("secret", d.config.SecretName))
|
||||
if err := secretPostResp.Error(); err != nil {
|
||||
return nil, fmt.Errorf("failed to create kubernetes secret: %w", err)
|
||||
}
|
||||
} else {
|
||||
secretPayload, err = client.Secrets(d.config.Namespace).Update(ctx, secretPayload, meta.UpdateOptions{})
|
||||
d.logger.Debug("kubernetes operate 'Secrets.Update'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload))
|
||||
if err != nil {
|
||||
secretPutResp := client.Put().
|
||||
Namespace(d.config.Namespace).
|
||||
Resource("secrets").
|
||||
Name(d.config.SecretName).
|
||||
VersionedParams(&meta.GetOptions{}, meta.ParameterCodec).
|
||||
Body(secretPayload).
|
||||
Do(ctx)
|
||||
d.logger.Debug("kubernetes operate 'Secrets.Put'", slog.String("namespace", d.config.Namespace), slog.Any("secret", d.config.SecretName))
|
||||
if err := secretPutResp.Error(); err != nil {
|
||||
return nil, fmt.Errorf("failed to update kubernetes secret: %w", err)
|
||||
}
|
||||
}
|
||||
@@ -195,7 +213,7 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*Dep
|
||||
return &DeployResult{}, nil
|
||||
}
|
||||
|
||||
func createK8sClient(kubeConfig string) (*typedcore.CoreV1Client, error) {
|
||||
func createK8sClient(kubeConfig string) (*rest.RESTClient, error) {
|
||||
var config *rest.Config
|
||||
var err error
|
||||
if kubeConfig == "" {
|
||||
@@ -211,7 +229,7 @@ func createK8sClient(kubeConfig string) (*typedcore.CoreV1Client, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client, err := typedcore.NewForConfig(config)
|
||||
client, err := rest.RESTClientFor(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
http "net/http"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
scheme "k8s.io/client-go/kubernetes/scheme"
|
||||
rest "k8s.io/client-go/rest"
|
||||
)
|
||||
|
||||
type CoreV1Interface interface {
|
||||
RESTClient() rest.Interface
|
||||
SecretsGetter
|
||||
}
|
||||
|
||||
type CoreV1Client struct {
|
||||
restClient rest.Interface
|
||||
}
|
||||
|
||||
func (c *CoreV1Client) Secrets(namespace string) SecretInterface {
|
||||
return newSecrets(c, namespace)
|
||||
}
|
||||
|
||||
func NewForConfig(c *rest.Config) (*CoreV1Client, error) {
|
||||
config := *c
|
||||
setConfigDefaults(&config)
|
||||
httpClient, err := rest.HTTPClientFor(&config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewForConfigAndClient(&config, httpClient)
|
||||
}
|
||||
|
||||
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*CoreV1Client, error) {
|
||||
config := *c
|
||||
setConfigDefaults(&config)
|
||||
client, err := rest.RESTClientForConfigAndClient(&config, h)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &CoreV1Client{client}, nil
|
||||
}
|
||||
|
||||
func setConfigDefaults(config *rest.Config) {
|
||||
gv := corev1.SchemeGroupVersion
|
||||
config.GroupVersion = &gv
|
||||
config.APIPath = "/api"
|
||||
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
||||
|
||||
if config.UserAgent == "" {
|
||||
config.UserAgent = rest.DefaultKubernetesUserAgent()
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CoreV1Client) RESTClient() rest.Interface {
|
||||
if c == nil {
|
||||
return nil
|
||||
}
|
||||
return c.restClient
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
)
|
||||
|
||||
type SecretExpansion = typedcorev1.SecretExpansion
|
||||
@@ -1,31 +0,0 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
applyconfigurationscorev1 "k8s.io/client-go/applyconfigurations/core/v1"
|
||||
gentype "k8s.io/client-go/gentype"
|
||||
scheme "k8s.io/client-go/kubernetes/scheme"
|
||||
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||
)
|
||||
|
||||
type SecretsGetter = typedcorev1.SecretsGetter
|
||||
|
||||
type SecretInterface = typedcorev1.SecretInterface
|
||||
|
||||
type secrets struct {
|
||||
*gentype.ClientWithListAndApply[*corev1.Secret, *corev1.SecretList, *applyconfigurationscorev1.SecretApplyConfiguration]
|
||||
}
|
||||
|
||||
func newSecrets(c *CoreV1Client, namespace string) *secrets {
|
||||
return &secrets{
|
||||
gentype.NewClientWithListAndApply[*corev1.Secret, *corev1.SecretList, *applyconfigurationscorev1.SecretApplyConfiguration](
|
||||
"secrets",
|
||||
c.RESTClient(),
|
||||
scheme.ParameterCodec,
|
||||
namespace,
|
||||
func() *corev1.Secret { return &corev1.Secret{} },
|
||||
func() *corev1.SecretList { return &corev1.SecretList{} },
|
||||
gentype.PrefersProtobuf[*corev1.Secret](),
|
||||
),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user