feat: implement function and http trigger resources via CRD

This commit is contained in:
Naeel
2026-04-14 22:40:11 +03:00
parent 8842ec070e
commit cf55828ba6
5 changed files with 624 additions and 14 deletions
@@ -26,6 +26,18 @@ var packageGVR = schema.GroupVersionResource{
Resource: "packages",
}
var functionGVR = schema.GroupVersionResource{
Group: "fission.io",
Version: "v1",
Resource: "functions",
}
var httpTriggerGVR = schema.GroupVersionResource{
Group: "fission.io",
Version: "v1",
Resource: "httptriggers",
}
// Client хранит клиентов Kubernetes API для работы с CRD Fission.
type Client struct {
DynClient dynamic.Interface
@@ -161,3 +173,83 @@ func (c *Client) DeletePackage(ctx context.Context, namespace, name string) erro
return nil
}
// CreateFunction создает объект Function в заданном namespace.
func (c *Client) CreateFunction(ctx context.Context, fn *unstructured.Unstructured) (*unstructured.Unstructured, error) {
createdFunction, err := c.DynClient.Resource(functionGVR).Namespace(fn.GetNamespace()).Create(ctx, fn, metav1.CreateOptions{})
if err != nil {
return nil, fmt.Errorf("create function %q: %w", fn.GetName(), err)
}
return createdFunction, nil
}
// GetFunction получает объект Function по имени.
func (c *Client) GetFunction(ctx context.Context, namespace, name string) (*unstructured.Unstructured, error) {
fn, err := c.DynClient.Resource(functionGVR).Namespace(namespace).Get(ctx, name, metav1.GetOptions{})
if err != nil {
return nil, fmt.Errorf("get function %q: %w", name, err)
}
return fn, nil
}
// UpdateFunction обновляет существующий объект Function.
func (c *Client) UpdateFunction(ctx context.Context, fn *unstructured.Unstructured) (*unstructured.Unstructured, error) {
updatedFunction, err := c.DynClient.Resource(functionGVR).Namespace(fn.GetNamespace()).Update(ctx, fn, metav1.UpdateOptions{})
if err != nil {
return nil, fmt.Errorf("update function %q: %w", fn.GetName(), err)
}
return updatedFunction, nil
}
// DeleteFunction удаляет объект Function по имени.
func (c *Client) DeleteFunction(ctx context.Context, namespace, name string) error {
err := c.DynClient.Resource(functionGVR).Namespace(namespace).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil {
return fmt.Errorf("delete function %q: %w", name, err)
}
return nil
}
// CreateHTTPTrigger создает объект HTTPTrigger в заданном namespace.
func (c *Client) CreateHTTPTrigger(ctx context.Context, trigger *unstructured.Unstructured) (*unstructured.Unstructured, error) {
createdTrigger, err := c.DynClient.Resource(httpTriggerGVR).Namespace(trigger.GetNamespace()).Create(ctx, trigger, metav1.CreateOptions{})
if err != nil {
return nil, fmt.Errorf("create http trigger %q: %w", trigger.GetName(), err)
}
return createdTrigger, nil
}
// GetHTTPTrigger получает объект HTTPTrigger по имени.
func (c *Client) GetHTTPTrigger(ctx context.Context, namespace, name string) (*unstructured.Unstructured, error) {
trigger, err := c.DynClient.Resource(httpTriggerGVR).Namespace(namespace).Get(ctx, name, metav1.GetOptions{})
if err != nil {
return nil, fmt.Errorf("get http trigger %q: %w", name, err)
}
return trigger, nil
}
// UpdateHTTPTrigger обновляет существующий объект HTTPTrigger.
func (c *Client) UpdateHTTPTrigger(ctx context.Context, trigger *unstructured.Unstructured) (*unstructured.Unstructured, error) {
updatedTrigger, err := c.DynClient.Resource(httpTriggerGVR).Namespace(trigger.GetNamespace()).Update(ctx, trigger, metav1.UpdateOptions{})
if err != nil {
return nil, fmt.Errorf("update http trigger %q: %w", trigger.GetName(), err)
}
return updatedTrigger, nil
}
// DeleteHTTPTrigger удаляет объект HTTPTrigger по имени.
func (c *Client) DeleteHTTPTrigger(ctx context.Context, namespace, name string) error {
err := c.DynClient.Resource(httpTriggerGVR).Namespace(namespace).Delete(ctx, name, metav1.DeleteOptions{})
if err != nil {
return fmt.Errorf("delete http trigger %q: %w", name, err)
}
return nil
}