From 99d6cd17080df36dfa006b99cda4942691205164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 1 Oct 2026 12:55:36 -0700 Subject: [PATCH 1/4] refactor: names follow the URL they serve Applies the rule in osapi-io/specs#243. Five moves, no change to the provider tree's nesting. cron is not a caller's choice the way a container runtime is, so it leaves the URL. /schedule/cron becomes /schedule, the permission scopes become schedule:read and schedule:write, and the SDK service is Schedule. The provider keeps its driver directory at provider/schedule/cron, because that is where a second driver would go. The container handlers had the convention inverted: the directory was named for the second URL segment and the files for the first. The directory is now container and the files are docker_*.go, which is what network already does with dns_get.go and route_get.go. The agent processor follows. mem becomes memory. An abbreviation is not a name, and the URL, the SDK and the generated types all said memory already. What deliberately did not change: /container/docker keeps its driver in the URL, provider/container/docker and provider/network/netplan/* keep their nesting, and node/apt and node/ntp keep hiding their drivers. Refs #566 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FuKUsHFG1EqZXamffh9M2c --- cmd/agent_setup.go | 18 +- ...eate.go => client_node_schedule_create.go} | 24 +- cmd/client_node_schedule_cron.go | 35 - ...lete.go => client_node_schedule_delete.go} | 12 +- ...ron_get.go => client_node_schedule_get.go} | 12 +- ...n_list.go => client_node_schedule_list.go} | 8 +- ...date.go => client_node_schedule_update.go} | 22 +- cmd/controller_setup.go | 2 +- ...delete-node-schedule-cron.StatusCodes.json | 1 - .../gen/api/delete-node-schedule-cron.api.mdx | 70 -- ...> delete-node-schedule.ParamsDetails.json} | 2 +- ...> delete-node-schedule.RequestSchema.json} | 0 .../api/delete-node-schedule.StatusCodes.json | 1 + .../docs/gen/api/delete-node-schedule.api.mdx | 70 ++ ...-node-schedule-by-name.ParamsDetails.json} | 2 +- ...-node-schedule-by-name.RequestSchema.json} | 0 ...get-node-schedule-by-name.StatusCodes.json | 1 + .../gen/api/get-node-schedule-by-name.api.mdx | 70 ++ ...ode-schedule-cron-by-name.StatusCodes.json | 1 - .../get-node-schedule-cron-by-name.api.mdx | 70 -- .../get-node-schedule-cron.StatusCodes.json | 1 - .../gen/api/get-node-schedule-cron.api.mdx | 70 -- ...n => get-node-schedule.ParamsDetails.json} | 0 ...n => get-node-schedule.RequestSchema.json} | 0 .../api/get-node-schedule.StatusCodes.json | 1 + docs/docs/gen/api/get-node-schedule.api.mdx | 70 ++ ...post-node-schedule-cron.RequestSchema.json | 1 - .../post-node-schedule-cron.StatusCodes.json | 1 - .../gen/api/post-node-schedule-cron.api.mdx | 70 -- ... => post-node-schedule.ParamsDetails.json} | 0 .../api/post-node-schedule.RequestSchema.json | 1 + .../api/post-node-schedule.StatusCodes.json | 1 + docs/docs/gen/api/post-node-schedule.api.mdx | 70 ++ .../put-node-schedule-cron.RequestSchema.json | 1 - .../put-node-schedule-cron.StatusCodes.json | 1 - .../gen/api/put-node-schedule-cron.api.mdx | 70 -- ...n => put-node-schedule.ParamsDetails.json} | 2 +- .../api/put-node-schedule.RequestSchema.json | 1 + .../api/put-node-schedule.StatusCodes.json | 1 + docs/docs/gen/api/put-node-schedule.api.mdx | 70 ++ ...anagement-api-schedule-operations.tag.mdx} | 8 +- docs/docs/gen/api/sidebar.ts | 24 +- examples/sdk/client/{cron.go => schedule.go} | 12 +- internal/agent/agent.go | 6 +- internal/agent/agent_public_test.go | 12 +- internal/agent/condition.go | 4 +- internal/agent/condition_public_test.go | 20 +- internal/agent/consumer_public_test.go | 4 +- internal/agent/drain_public_test.go | 4 +- internal/agent/export_test.go | 8 +- internal/agent/facts_public_test.go | 4 +- internal/agent/handler_public_test.go | 4 +- internal/agent/heartbeat.go | 6 +- internal/agent/heartbeat_public_test.go | 10 +- internal/agent/lifecycle_public_test.go | 4 +- internal/agent/node_status_public_test.go | 14 +- internal/agent/processor.go | 18 +- ...essor_docker.go => processor_container.go} | 0 ....go => processor_container_public_test.go} | 0 internal/agent/processor_public_test.go | 26 +- internal/agent/processor_schedule.go | 4 +- .../agent/processor_schedule_public_test.go | 22 +- internal/agent/test_agent_public_test.go | 12 +- internal/agent/types.go | 4 +- .../api/agent/agent_get_public_test.go | 6 +- .../api/agent/agent_list_public_test.go | 4 +- internal/controller/api/gen/api.yaml | 162 ++-- .../node/{docker => container}/container.go | 2 +- .../api/node/{docker => container}/convert.go | 0 .../convert_public_test.go | 2 +- .../docker_create.go} | 2 +- .../docker_create_public_test.go} | 4 +- .../docker_exec.go} | 2 +- .../docker_exec_public_test.go} | 4 +- .../docker_image_remove.go} | 2 +- .../docker_image_remove_public_test.go} | 4 +- .../docker_inspect.go} | 2 +- .../docker_inspect_public_test.go} | 4 +- .../docker_list.go} | 2 +- .../docker_list_public_test.go} | 4 +- .../docker_pull.go} | 2 +- .../docker_pull_public_test.go} | 4 +- .../docker_remove.go} | 2 +- .../docker_remove_public_test.go} | 4 +- .../docker_start.go} | 2 +- .../docker_start_public_test.go} | 4 +- .../docker_stop.go} | 2 +- .../docker_stop_public_test.go} | 4 +- .../node/{docker => container}/export_test.go | 0 .../node/{docker => container}/gen/api.yaml | 0 .../node/{docker => container}/gen/cfg.yaml | 0 .../{docker => container}/gen/docker.gen.go | 0 .../{docker => container}/gen/generate.go | 0 .../api/node/{docker => container}/handler.go | 2 +- .../handler_public_test.go | 2 +- .../api/node/{docker => container}/types.go | 0 .../node/{docker => container}/validate.go | 0 .../controller/api/node/node_memory_get.go | 10 +- .../api/node/node_memory_get_public_test.go | 14 +- .../api/node/node_status_get_public_test.go | 6 +- .../schedule/{cron_create.go => create.go} | 52 +- ...e_public_test.go => create_public_test.go} | 182 ++-- .../schedule/{cron_delete.go => delete.go} | 52 +- ...e_public_test.go => delete_public_test.go} | 110 +-- .../controller/api/node/schedule/gen/api.yaml | 156 ++-- .../api/node/schedule/gen/schedule.gen.go | 582 ++++++------- .../api/node/schedule/{cron_get.go => get.go} | 52 +- ..._get_public_test.go => get_public_test.go} | 116 +-- .../api/node/schedule/handler_public_test.go | 2 +- .../{cron_list_get.go => list_get.go} | 60 +- ...public_test.go => list_get_public_test.go} | 110 +-- .../schedule/{cron_update.go => update.go} | 56 +- ...e_public_test.go => update_public_test.go} | 156 ++-- internal/job/types.go | 18 +- internal/job/types_public_test.go | 4 +- .../provider/node/{mem => memory}/darwin.go | 2 +- .../node/{mem => memory}/darwin_get_vm.go | 2 +- .../darwin_get_vm_public_test.go | 4 +- .../provider/node/{mem => memory}/debian.go | 2 +- .../node/{mem => memory}/debian_get_vm.go | 2 +- .../debian_get_vm_public_test.go | 4 +- .../provider/node/{mem => memory}/linux.go | 4 +- .../node/{mem => memory}/linux_get_vm.go | 2 +- .../linux_get_vm_public_test.go | 4 +- .../node/{mem => memory}/mocks/generate.go | 0 .../node/{mem => memory}/mocks/mocks.go | 4 +- .../node/{mem => memory}/mocks/types.gen.go | 6 +- .../provider/node/{mem => memory}/types.go | 2 +- .../{scheduled => schedule}/cron/darwin.go | 0 .../cron/darwin_public_test.go | 2 +- .../{scheduled => schedule}/cron/debian.go | 0 .../cron/debian_public_test.go | 2 +- .../{scheduled => schedule}/cron/linux.go | 0 .../cron/linux_public_test.go | 2 +- .../cron/mocks/generate.go | 0 .../cron/mocks/provider.gen.go | 2 +- .../{scheduled => schedule}/cron/types.go | 0 internal/validation/validation_public_test.go | 2 +- pkg/sdk/client/gen/client.gen.go | 824 +++++++++--------- pkg/sdk/client/operations.go | 10 +- pkg/sdk/client/osapi.go | 6 +- pkg/sdk/client/permissions.go | 4 +- pkg/sdk/client/{cron.go => schedule.go} | 48 +- ...public_test.go => schedule_public_test.go} | 142 +-- .../{cron_types.go => schedule_types.go} | 86 +- ui/src/sdk/gen/api.yaml | 162 ++-- ...dule-management-api-schedule-operations.ts | 339 +++++++ ui/src/sdk/gen/schemas/index.ts | 34 +- .../gen/schemas/scheduleCollectionResponse.ts | 13 + .../sdk/gen/schemas/scheduleCreateRequest.ts | 33 + .../scheduleCreateRequestContentType.ts | 18 + .../schemas/scheduleCreateRequestInterval.ts | 20 + .../gen/schemas/scheduleCreateRequestVars.ts | 12 + .../sdk/gen/schemas/scheduleCreateResponse.ts | 13 + .../sdk/gen/schemas/scheduleDeleteResponse.ts | 13 + ui/src/sdk/gen/schemas/scheduleEntry.ts | 35 + .../sdk/gen/schemas/scheduleEntryInterval.ts | 20 + ui/src/sdk/gen/schemas/scheduleEntryStatus.ts | 19 + ui/src/sdk/gen/schemas/scheduleGetResponse.ts | 16 + .../sdk/gen/schemas/scheduleMutationResult.ts | 23 + .../schemas/scheduleMutationResultStatus.ts | 19 + .../sdk/gen/schemas/scheduleUpdateRequest.ts | 25 + .../scheduleUpdateRequestContentType.ts | 18 + .../gen/schemas/scheduleUpdateRequestVars.ts | 12 + .../sdk/gen/schemas/scheduleUpdateResponse.ts | 13 + 165 files changed, 2853 insertions(+), 2227 deletions(-) rename cmd/{client_node_schedule_cron_create.go => client_node_schedule_create.go} (80%) delete mode 100644 cmd/client_node_schedule_cron.go rename cmd/{client_node_schedule_cron_delete.go => client_node_schedule_delete.go} (85%) rename cmd/{client_node_schedule_cron_get.go => client_node_schedule_get.go} (86%) rename cmd/{client_node_schedule_cron_list.go => client_node_schedule_list.go} (90%) rename cmd/{client_node_schedule_cron_update.go => client_node_schedule_update.go} (80%) delete mode 100644 docs/docs/gen/api/delete-node-schedule-cron.StatusCodes.json delete mode 100644 docs/docs/gen/api/delete-node-schedule-cron.api.mdx rename docs/docs/gen/api/{delete-node-schedule-cron.ParamsDetails.json => delete-node-schedule.ParamsDetails.json} (56%) rename docs/docs/gen/api/{delete-node-schedule-cron.RequestSchema.json => delete-node-schedule.RequestSchema.json} (100%) create mode 100644 docs/docs/gen/api/delete-node-schedule.StatusCodes.json create mode 100644 docs/docs/gen/api/delete-node-schedule.api.mdx rename docs/docs/gen/api/{get-node-schedule-cron-by-name.ParamsDetails.json => get-node-schedule-by-name.ParamsDetails.json} (56%) rename docs/docs/gen/api/{get-node-schedule-cron-by-name.RequestSchema.json => get-node-schedule-by-name.RequestSchema.json} (100%) create mode 100644 docs/docs/gen/api/get-node-schedule-by-name.StatusCodes.json create mode 100644 docs/docs/gen/api/get-node-schedule-by-name.api.mdx delete mode 100644 docs/docs/gen/api/get-node-schedule-cron-by-name.StatusCodes.json delete mode 100644 docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx delete mode 100644 docs/docs/gen/api/get-node-schedule-cron.StatusCodes.json delete mode 100644 docs/docs/gen/api/get-node-schedule-cron.api.mdx rename docs/docs/gen/api/{get-node-schedule-cron.ParamsDetails.json => get-node-schedule.ParamsDetails.json} (100%) rename docs/docs/gen/api/{get-node-schedule-cron.RequestSchema.json => get-node-schedule.RequestSchema.json} (100%) create mode 100644 docs/docs/gen/api/get-node-schedule.StatusCodes.json create mode 100644 docs/docs/gen/api/get-node-schedule.api.mdx delete mode 100644 docs/docs/gen/api/post-node-schedule-cron.RequestSchema.json delete mode 100644 docs/docs/gen/api/post-node-schedule-cron.StatusCodes.json delete mode 100644 docs/docs/gen/api/post-node-schedule-cron.api.mdx rename docs/docs/gen/api/{post-node-schedule-cron.ParamsDetails.json => post-node-schedule.ParamsDetails.json} (100%) create mode 100644 docs/docs/gen/api/post-node-schedule.RequestSchema.json create mode 100644 docs/docs/gen/api/post-node-schedule.StatusCodes.json create mode 100644 docs/docs/gen/api/post-node-schedule.api.mdx delete mode 100644 docs/docs/gen/api/put-node-schedule-cron.RequestSchema.json delete mode 100644 docs/docs/gen/api/put-node-schedule-cron.StatusCodes.json delete mode 100644 docs/docs/gen/api/put-node-schedule-cron.api.mdx rename docs/docs/gen/api/{put-node-schedule-cron.ParamsDetails.json => put-node-schedule.ParamsDetails.json} (56%) create mode 100644 docs/docs/gen/api/put-node-schedule.RequestSchema.json create mode 100644 docs/docs/gen/api/put-node-schedule.StatusCodes.json create mode 100644 docs/docs/gen/api/put-node-schedule.api.mdx rename docs/docs/gen/api/{schedule-management-api-cron-operations.tag.mdx => schedule-management-api-schedule-operations.tag.mdx} (60%) rename examples/sdk/client/{cron.go => schedule.go} (94%) rename internal/agent/{processor_docker.go => processor_container.go} (100%) rename internal/agent/{processor_docker_public_test.go => processor_container_public_test.go} (100%) rename internal/controller/api/node/{docker => container}/container.go (95%) rename internal/controller/api/node/{docker => container}/convert.go (100%) rename internal/controller/api/node/{docker => container}/convert_public_test.go (99%) rename internal/controller/api/node/{docker/container_create.go => container/docker_create.go} (98%) rename internal/controller/api/node/{docker/container_create_public_test.go => container/docker_create_public_test.go} (99%) rename internal/controller/api/node/{docker/container_exec.go => container/docker_exec.go} (98%) rename internal/controller/api/node/{docker/container_exec_public_test.go => container/docker_exec_public_test.go} (99%) rename internal/controller/api/node/{docker/container_image_remove.go => container/docker_image_remove.go} (98%) rename internal/controller/api/node/{docker/container_image_remove_public_test.go => container/docker_image_remove_public_test.go} (99%) rename internal/controller/api/node/{docker/container_inspect.go => container/docker_inspect.go} (98%) rename internal/controller/api/node/{docker/container_inspect_public_test.go => container/docker_inspect_public_test.go} (99%) rename internal/controller/api/node/{docker/container_list.go => container/docker_list.go} (98%) rename internal/controller/api/node/{docker/container_list_public_test.go => container/docker_list_public_test.go} (99%) rename internal/controller/api/node/{docker/container_pull.go => container/docker_pull.go} (98%) rename internal/controller/api/node/{docker/container_pull_public_test.go => container/docker_pull_public_test.go} (99%) rename internal/controller/api/node/{docker/container_remove.go => container/docker_remove.go} (98%) rename internal/controller/api/node/{docker/container_remove_public_test.go => container/docker_remove_public_test.go} (99%) rename internal/controller/api/node/{docker/container_start.go => container/docker_start.go} (98%) rename internal/controller/api/node/{docker/container_start_public_test.go => container/docker_start_public_test.go} (99%) rename internal/controller/api/node/{docker/container_stop.go => container/docker_stop.go} (98%) rename internal/controller/api/node/{docker/container_stop_public_test.go => container/docker_stop_public_test.go} (99%) rename internal/controller/api/node/{docker => container}/export_test.go (100%) rename internal/controller/api/node/{docker => container}/gen/api.yaml (100%) rename internal/controller/api/node/{docker => container}/gen/cfg.yaml (100%) rename internal/controller/api/node/{docker => container}/gen/docker.gen.go (100%) rename internal/controller/api/node/{docker => container}/gen/generate.go (100%) rename internal/controller/api/node/{docker => container}/handler.go (96%) rename internal/controller/api/node/{docker => container}/handler_public_test.go (99%) rename internal/controller/api/node/{docker => container}/types.go (100%) rename internal/controller/api/node/{docker => container}/validate.go (100%) rename internal/controller/api/node/schedule/{cron_create.go => create.go} (72%) rename internal/controller/api/node/schedule/{cron_create_public_test.go => create_public_test.go} (78%) rename internal/controller/api/node/schedule/{cron_delete.go => delete.go} (70%) rename internal/controller/api/node/schedule/{cron_delete_public_test.go => delete_public_test.go} (81%) rename internal/controller/api/node/schedule/{cron_get.go => get.go} (71%) rename internal/controller/api/node/schedule/{cron_get_public_test.go => get_public_test.go} (81%) rename internal/controller/api/node/schedule/{cron_list_get.go => list_get.go} (69%) rename internal/controller/api/node/schedule/{cron_list_get_public_test.go => list_get_public_test.go} (83%) rename internal/controller/api/node/schedule/{cron_update.go => update.go} (71%) rename internal/controller/api/node/schedule/{cron_update_public_test.go => update_public_test.go} (79%) rename internal/provider/node/{mem => memory}/darwin.go (99%) rename internal/provider/node/{mem => memory}/darwin_get_vm.go (99%) rename internal/provider/node/{mem => memory}/darwin_get_vm_public_test.go (97%) rename internal/provider/node/{mem => memory}/debian.go (99%) rename internal/provider/node/{mem => memory}/debian_get_vm.go (99%) rename internal/provider/node/{mem => memory}/debian_get_vm_public_test.go (97%) rename internal/provider/node/{mem => memory}/linux.go (95%) rename internal/provider/node/{mem => memory}/linux_get_vm.go (98%) rename internal/provider/node/{mem => memory}/linux_get_vm_public_test.go (96%) rename internal/provider/node/{mem => memory}/mocks/generate.go (100%) rename internal/provider/node/{mem => memory}/mocks/mocks.go (93%) rename internal/provider/node/{mem => memory}/mocks/types.gen.go (89%) rename internal/provider/node/{mem => memory}/types.go (99%) rename internal/provider/{scheduled => schedule}/cron/darwin.go (100%) rename internal/provider/{scheduled => schedule}/cron/darwin_public_test.go (98%) rename internal/provider/{scheduled => schedule}/cron/debian.go (100%) rename internal/provider/{scheduled => schedule}/cron/debian_public_test.go (99%) rename internal/provider/{scheduled => schedule}/cron/linux.go (100%) rename internal/provider/{scheduled => schedule}/cron/linux_public_test.go (98%) rename internal/provider/{scheduled => schedule}/cron/mocks/generate.go (100%) rename internal/provider/{scheduled => schedule}/cron/mocks/provider.gen.go (98%) rename internal/provider/{scheduled => schedule}/cron/types.go (100%) rename pkg/sdk/client/{cron.go => schedule.go} (79%) rename pkg/sdk/client/{cron_public_test.go => schedule_public_test.go} (85%) rename pkg/sdk/client/{cron_types.go => schedule_types.go} (68%) create mode 100644 ui/src/sdk/gen/schedule-management-api-schedule-operations/schedule-management-api-schedule-operations.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCollectionResponse.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCreateRequest.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCreateRequestContentType.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCreateRequestInterval.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCreateRequestVars.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleCreateResponse.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleDeleteResponse.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleEntry.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleEntryInterval.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleEntryStatus.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleGetResponse.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleMutationResult.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleMutationResultStatus.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleUpdateRequest.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleUpdateRequestContentType.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleUpdateRequestVars.ts create mode 100644 ui/src/sdk/gen/schemas/scheduleUpdateResponse.ts diff --git a/cmd/agent_setup.go b/cmd/agent_setup.go index a32e9faca..720c27096 100644 --- a/cmd/agent_setup.go +++ b/cmd/agent_setup.go @@ -47,7 +47,7 @@ import ( nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" logProv "github.com/osapi-io/osapi/internal/provider/node/log" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ntpProv "github.com/osapi-io/osapi/internal/provider/node/ntp" powerProv "github.com/osapi-io/osapi/internal/provider/node/power" processProv "github.com/osapi-io/osapi/internal/provider/node/process" @@ -55,7 +55,7 @@ import ( sysctlProv "github.com/osapi-io/osapi/internal/provider/node/sysctl" timezoneProv "github.com/osapi-io/osapi/internal/provider/node/timezone" userProv "github.com/osapi-io/osapi/internal/provider/node/user" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/telemetry/process" "github.com/osapi-io/osapi/pkg/sdk/platform" ) @@ -114,14 +114,14 @@ func setupAgent( diskProvider = disk.NewLinuxProvider() } - var memProvider mem.Provider + var memoryProvider memory.Provider switch plat { case "debian": - memProvider = mem.NewDebianProvider() + memoryProvider = memory.NewDebianProvider() case "darwin": - memProvider = mem.NewDarwinProvider() + memoryProvider = memory.NewDarwinProvider() default: - memProvider = mem.NewLinuxProvider() + memoryProvider = memory.NewLinuxProvider() } var loadProvider load.Provider @@ -235,7 +235,7 @@ func setupAgent( agent.NewNodeProcessor( hostProvider, diskProvider, - memProvider, + memoryProvider, loadProvider, sysctlProvider, ntpProvider, @@ -251,7 +251,7 @@ func setupAgent( ), hostProvider, diskProvider, - memProvider, + memoryProvider, loadProvider, sysctlProvider, ntpProvider, @@ -313,7 +313,7 @@ func setupAgent( streamName, hostProvider, diskProvider, - memProvider, + memoryProvider, loadProvider, netinfoProvider, process.New(), diff --git a/cmd/client_node_schedule_cron_create.go b/cmd/client_node_schedule_create.go similarity index 80% rename from cmd/client_node_schedule_cron_create.go rename to cmd/client_node_schedule_create.go index 948f11cd0..9e6db1809 100644 --- a/cmd/client_node_schedule_cron_create.go +++ b/cmd/client_node_schedule_create.go @@ -29,8 +29,8 @@ import ( "github.com/osapi-io/osapi/pkg/sdk/client" ) -// clientNodeScheduleCronCreateCmd represents the cron create command. -var clientNodeScheduleCronCreateCmd = &cobra.Command{ +// clientNodeScheduleCreateCmd represents the cron create command. +var clientNodeScheduleCreateCmd = &cobra.Command{ Use: "create", Short: "Create a cron entry", Run: func(cmd *cobra.Command, _ []string) { @@ -43,7 +43,7 @@ var clientNodeScheduleCronCreateCmd = &cobra.Command{ user, _ := cmd.Flags().GetString("user") contentType, _ := cmd.Flags().GetString("content-type") - resp, err := sdkClient.Cron.Create(ctx, host, client.CronCreateOpts{ + resp, err := sdkClient.Schedule.Create(ctx, host, client.ScheduleCreateOpts{ Name: name, Object: object, Schedule: schedule, @@ -89,21 +89,21 @@ var clientNodeScheduleCronCreateCmd = &cobra.Command{ } func init() { - clientNodeScheduleCronCmd.AddCommand(clientNodeScheduleCronCreateCmd) + clientNodeScheduleCmd.AddCommand(clientNodeScheduleCreateCmd) - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("name", "", "Name for the cron drop-in entry (required)") - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("object", "", "Name of the uploaded file in the object store (required)") - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("schedule", "", "Cron schedule expression, e.g. \"*/5 * * * *\"") - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("interval", "", "Periodic interval: hourly, daily, weekly, monthly") - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("user", "", "User to run the command as (default root)") - clientNodeScheduleCronCreateCmd.PersistentFlags(). + clientNodeScheduleCreateCmd.PersistentFlags(). String("content-type", "", "Content type: raw or template") - _ = clientNodeScheduleCronCreateCmd.MarkPersistentFlagRequired("name") - _ = clientNodeScheduleCronCreateCmd.MarkPersistentFlagRequired("object") + _ = clientNodeScheduleCreateCmd.MarkPersistentFlagRequired("name") + _ = clientNodeScheduleCreateCmd.MarkPersistentFlagRequired("object") } diff --git a/cmd/client_node_schedule_cron.go b/cmd/client_node_schedule_cron.go deleted file mode 100644 index 70f868f4c..000000000 --- a/cmd/client_node_schedule_cron.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2026 John Dewey - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -package cmd - -import ( - "github.com/spf13/cobra" -) - -// clientNodeScheduleCronCmd represents the clientNodeScheduleCron command. -var clientNodeScheduleCronCmd = &cobra.Command{ - Use: "cron", - Short: "The cron subcommand", -} - -func init() { - clientNodeScheduleCmd.AddCommand(clientNodeScheduleCronCmd) -} diff --git a/cmd/client_node_schedule_cron_delete.go b/cmd/client_node_schedule_delete.go similarity index 85% rename from cmd/client_node_schedule_cron_delete.go rename to cmd/client_node_schedule_delete.go index df45be871..428a0c9e8 100644 --- a/cmd/client_node_schedule_cron_delete.go +++ b/cmd/client_node_schedule_delete.go @@ -28,8 +28,8 @@ import ( "github.com/osapi-io/osapi/internal/cli" ) -// clientNodeScheduleCronDeleteCmd represents the cron delete command. -var clientNodeScheduleCronDeleteCmd = &cobra.Command{ +// clientNodeScheduleDeleteCmd represents the cron delete command. +var clientNodeScheduleDeleteCmd = &cobra.Command{ Use: "delete", Short: "Delete a cron entry", Run: func(cmd *cobra.Command, _ []string) { @@ -37,7 +37,7 @@ var clientNodeScheduleCronDeleteCmd = &cobra.Command{ host, _ := cmd.Flags().GetString("target") name, _ := cmd.Flags().GetString("name") - resp, err := sdkClient.Cron.Delete(ctx, host, name) + resp, err := sdkClient.Schedule.Delete(ctx, host, name) if err != nil { cli.HandleError(err, logger) return @@ -76,10 +76,10 @@ var clientNodeScheduleCronDeleteCmd = &cobra.Command{ } func init() { - clientNodeScheduleCronCmd.AddCommand(clientNodeScheduleCronDeleteCmd) + clientNodeScheduleCmd.AddCommand(clientNodeScheduleDeleteCmd) - clientNodeScheduleCronDeleteCmd.PersistentFlags(). + clientNodeScheduleDeleteCmd.PersistentFlags(). String("name", "", "Name of the cron entry to delete (required)") - _ = clientNodeScheduleCronDeleteCmd.MarkPersistentFlagRequired("name") + _ = clientNodeScheduleDeleteCmd.MarkPersistentFlagRequired("name") } diff --git a/cmd/client_node_schedule_cron_get.go b/cmd/client_node_schedule_get.go similarity index 86% rename from cmd/client_node_schedule_cron_get.go rename to cmd/client_node_schedule_get.go index 19d9878c3..f0a250614 100644 --- a/cmd/client_node_schedule_cron_get.go +++ b/cmd/client_node_schedule_get.go @@ -28,8 +28,8 @@ import ( "github.com/osapi-io/osapi/internal/cli" ) -// clientNodeScheduleCronGetCmd represents the cron get command. -var clientNodeScheduleCronGetCmd = &cobra.Command{ +// clientNodeScheduleGetCmd represents the cron get command. +var clientNodeScheduleGetCmd = &cobra.Command{ Use: "get", Short: "Get a cron entry by name", Run: func(cmd *cobra.Command, _ []string) { @@ -37,7 +37,7 @@ var clientNodeScheduleCronGetCmd = &cobra.Command{ host, _ := cmd.Flags().GetString("target") name, _ := cmd.Flags().GetString("name") - resp, err := sdkClient.Cron.Get(ctx, host, name) + resp, err := sdkClient.Schedule.Get(ctx, host, name) if err != nil { cli.HandleError(err, logger) return @@ -76,10 +76,10 @@ var clientNodeScheduleCronGetCmd = &cobra.Command{ } func init() { - clientNodeScheduleCronCmd.AddCommand(clientNodeScheduleCronGetCmd) + clientNodeScheduleCmd.AddCommand(clientNodeScheduleGetCmd) - clientNodeScheduleCronGetCmd.PersistentFlags(). + clientNodeScheduleGetCmd.PersistentFlags(). String("name", "", "Name of the cron entry (required)") - _ = clientNodeScheduleCronGetCmd.MarkPersistentFlagRequired("name") + _ = clientNodeScheduleGetCmd.MarkPersistentFlagRequired("name") } diff --git a/cmd/client_node_schedule_cron_list.go b/cmd/client_node_schedule_list.go similarity index 90% rename from cmd/client_node_schedule_cron_list.go rename to cmd/client_node_schedule_list.go index 956f051c3..25c6d6ce4 100644 --- a/cmd/client_node_schedule_cron_list.go +++ b/cmd/client_node_schedule_list.go @@ -28,15 +28,15 @@ import ( "github.com/osapi-io/osapi/internal/cli" ) -// clientNodeScheduleCronListCmd represents the cron list command. -var clientNodeScheduleCronListCmd = &cobra.Command{ +// clientNodeScheduleListCmd represents the cron list command. +var clientNodeScheduleListCmd = &cobra.Command{ Use: "list", Short: "List all cron entries", Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() host, _ := cmd.Flags().GetString("target") - resp, err := sdkClient.Cron.List(ctx, host) + resp, err := sdkClient.Schedule.List(ctx, host) if err != nil { cli.HandleError(err, logger) return @@ -79,5 +79,5 @@ var clientNodeScheduleCronListCmd = &cobra.Command{ } func init() { - clientNodeScheduleCronCmd.AddCommand(clientNodeScheduleCronListCmd) + clientNodeScheduleCmd.AddCommand(clientNodeScheduleListCmd) } diff --git a/cmd/client_node_schedule_cron_update.go b/cmd/client_node_schedule_update.go similarity index 80% rename from cmd/client_node_schedule_cron_update.go rename to cmd/client_node_schedule_update.go index 7128f0111..3eb0ab7cd 100644 --- a/cmd/client_node_schedule_cron_update.go +++ b/cmd/client_node_schedule_update.go @@ -29,8 +29,8 @@ import ( "github.com/osapi-io/osapi/pkg/sdk/client" ) -// clientNodeScheduleCronUpdateCmd represents the cron update command. -var clientNodeScheduleCronUpdateCmd = &cobra.Command{ +// clientNodeScheduleUpdateCmd represents the cron update command. +var clientNodeScheduleUpdateCmd = &cobra.Command{ Use: "update", Short: "Update a cron entry", Run: func(cmd *cobra.Command, _ []string) { @@ -42,7 +42,7 @@ var clientNodeScheduleCronUpdateCmd = &cobra.Command{ user, _ := cmd.Flags().GetString("user") contentType, _ := cmd.Flags().GetString("content-type") - resp, err := sdkClient.Cron.Update(ctx, host, name, client.CronUpdateOpts{ + resp, err := sdkClient.Schedule.Update(ctx, host, name, client.ScheduleUpdateOpts{ Object: object, Schedule: schedule, User: user, @@ -86,19 +86,19 @@ var clientNodeScheduleCronUpdateCmd = &cobra.Command{ } func init() { - clientNodeScheduleCronCmd.AddCommand(clientNodeScheduleCronUpdateCmd) + clientNodeScheduleCmd.AddCommand(clientNodeScheduleUpdateCmd) - clientNodeScheduleCronUpdateCmd.PersistentFlags(). + clientNodeScheduleUpdateCmd.PersistentFlags(). String("name", "", "Name of the cron entry to update (required)") - clientNodeScheduleCronUpdateCmd.PersistentFlags(). + clientNodeScheduleUpdateCmd.PersistentFlags(). String("object", "", "New object to deploy") - clientNodeScheduleCronUpdateCmd.PersistentFlags(). + clientNodeScheduleUpdateCmd.PersistentFlags(). String("schedule", "", "New cron schedule expression") - clientNodeScheduleCronUpdateCmd.PersistentFlags(). + clientNodeScheduleUpdateCmd.PersistentFlags(). String("user", "", "New user to run the command as") - clientNodeScheduleCronUpdateCmd.PersistentFlags(). + clientNodeScheduleUpdateCmd.PersistentFlags(). String("content-type", "", "Content type: raw or template") - _ = clientNodeScheduleCronUpdateCmd.MarkPersistentFlagRequired("name") - clientNodeScheduleCronUpdateCmd.MarkFlagsOneRequired("object", "schedule", "user") + _ = clientNodeScheduleUpdateCmd.MarkPersistentFlagRequired("name") + clientNodeScheduleUpdateCmd.MarkFlagsOneRequired("object", "schedule", "user") } diff --git a/cmd/controller_setup.go b/cmd/controller_setup.go index a6a003199..e532859bc 100644 --- a/cmd/controller_setup.go +++ b/cmd/controller_setup.go @@ -52,7 +52,7 @@ import ( nodeAPI "github.com/osapi-io/osapi/internal/controller/api/node" certificateAPI "github.com/osapi-io/osapi/internal/controller/api/node/certificate" commandAPI "github.com/osapi-io/osapi/internal/controller/api/node/command" - dockerAPI "github.com/osapi-io/osapi/internal/controller/api/node/docker" + dockerAPI "github.com/osapi-io/osapi/internal/controller/api/node/container" nodeFileAPI "github.com/osapi-io/osapi/internal/controller/api/node/file" hostnameAPI "github.com/osapi-io/osapi/internal/controller/api/node/hostname" logAPI "github.com/osapi-io/osapi/internal/controller/api/node/log" diff --git a/docs/docs/gen/api/delete-node-schedule-cron.StatusCodes.json b/docs/docs/gen/api/delete-node-schedule-cron.StatusCodes.json deleted file mode 100644 index 4ba6458da..000000000 --- a/docs/docs/gen/api/delete-node-schedule-cron.StatusCodes.json +++ /dev/null @@ -1 +0,0 @@ -{"responses":{"200":{"description":"Cron entry deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Cron entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"CronMutationResult"}}},"required":["results"],"title":"CronDeleteResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Cron entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error deleting cron entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/delete-node-schedule-cron.api.mdx b/docs/docs/gen/api/delete-node-schedule-cron.api.mdx deleted file mode 100644 index 3dc396252..000000000 --- a/docs/docs/gen/api/delete-node-schedule-cron.api.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: delete-node-schedule-cron -title: "Delete a cron entry" -description: "Delete a cron drop-in entry from the target node." -sidebar_label: "Delete a cron entry" -hide_title: true -hide_table_of_contents: true -api: eJztWG2PGjcQ/iuW1Q+J6gUu5dIGqR9Ic1GvSqoovShSrxSZ9cD62LW349nLEbT/vRp74TigbZomUiPdJxbW8/Y8M8OM19JAyNHWZL2TI/kMSiAQWuTonTDo68w6AY5wJeboK0EFCNK4ABLOG+j95qSSpBdBji7lL3kBpilh+lI7vYAKHE3Hr86nrGzqa0DNZoKcKLn9dm62Zn/2BjYqfkDPmgPkDVpaydHlWj4FjYDjhgo2xkpH79ASyEk7UbLWqCsgwBAPO12BHMnCB4qPSloOsNZUSCUR/mgsgpEjwgbUHgoXKUC9AEdio0EJhAB4DUagb8i6hbjWZQPiwVS7lRJTXZYPlfAoSj2DUgQoISeP4sESVqN49GGC6ybzurZZ7g0swGVwQ6izhOFaXuvSGk3s+8ZJVVn3/YmKb6YJfNkqGfICKs0ytKr5fCC0biGVrKx7AW7BOJ20rdqC8a+BYBY69lm2J142gUTuHWnrhHflSuiyLrRrKkCbi7zQqHPmQInGGcCQe4SghHZGFKu6ABf+CwYfHjbnAxEgR/H7pc7ej7NfB9mTaTb5+ivZcr4ghNq7ANHio8GAP/4yehMT1PSkkhw9OOLjuq5Lm8c07l8FllkfuudnV5CTVLJGTnqyyeKVn02tORbG3GOlSY5k01gjD3KzAHHlZ+L8mWgCGEFe1OhzCEFQYYNgwCAQewo3uqpL1n16OoDvhoNBBo+ezLLhiRlm+tuTx9lw+Pjx6elwOBgMBowtQmhKCjteaUS94pwhqMKxqO569zoqEH6+aSE5giZQoqlN/PTYYSm2HUDMPQrvIFZa7wCobQUfgequ8R+7k2ye+1SqXyo0bSBivBikre1ezCjS1IRj+sE1Ffcav2RetC2BCQlLW9fxiWwFviFuaIcsJbUbZ+6GG71I8bZKflh4+8XIknmh3QJ202jmfQnaHUi/LYAKwD1fKm/s3IIRYRUIquhz0gyIHv/ZqTM+JioIQS9A2F3gE1492ba7beZytyV3yE8YSYqZykG+bCh6l5JJtvsKNlm6J5b+RF53Zc1irZLDY4X9VJtNnYhMdN2G4YhBf8Ii/0AQx2Ln+yZhomzKXp/nDWJqP7dF/Tziyw0AgdDC9SblIn8GSNvyaFbvGTfG8qMuRScj9Mw3dOvEUbOmATbtgN55XIquElJSerObztYRLACPdrIUJAvcMXI6GDB5G3Zjkh0Qe3JI7BunGyo82vdgRCbGr87FElZimzz3xH4JxH5zSOxzjzNrDDiRiXMXmvnc5pabTA1Y2RDiWHnP7pfA7vBvBy3nScx94z7lqHVP52ej8/TY32uaCeKYx1tSvmX3ntP/P6etkhVQ4XktT5O6VGlZHMm+rm2f1/7+ejPEtf3Qbex95rm/jj/GzR2v0y4+uV3jebuvEoG7y/w2oIKolt2KF4fZeEiq7uH5ZjP66e1FHCutm/so3oUzjoPn7e0DTwBSSXYkIXPSG/TiplP7QJWOKdctx3evPmK+7gO7vs3ej70pSXES3FC/LrV17EuDJetOIF9KXVupJMtIJUe703KHNFdRuh4ZxTcTFWdqll2vZzrAGyzbln/+owFcJQquNVo9Y5Qu19LYwM9Gjua6DPtr/26YD153s9ND8ZlvRY5Cs9lCHXMRT8uRlEouYbV7ucN3HB8V0+e74PiIcFIok1bJArQBjFSlV+M8h5p2hA56J19pbAv32dmLs4szqaS+W1979RQNHPVpvU4nLvwSXNtuXST+zj627Z95jALq -sidebar_class_name: "delete api-method" -info_path: gen/api/agent-management-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; -import Translate from "@docusaurus/Translate"; - - - - - - - - - - -Delete a cron drop-in entry from the target node. - - - - Request - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/docs/gen/api/delete-node-schedule-cron.ParamsDetails.json b/docs/docs/gen/api/delete-node-schedule.ParamsDetails.json similarity index 56% rename from docs/docs/gen/api/delete-node-schedule-cron.ParamsDetails.json rename to docs/docs/gen/api/delete-node-schedule.ParamsDetails.json index 748479206..1bf06c373 100644 --- a/docs/docs/gen/api/delete-node-schedule-cron.ParamsDetails.json +++ b/docs/docs/gen/api/delete-node-schedule.ParamsDetails.json @@ -1 +1 @@ -{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Cron entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file +{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Scheduled entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file diff --git a/docs/docs/gen/api/delete-node-schedule-cron.RequestSchema.json b/docs/docs/gen/api/delete-node-schedule.RequestSchema.json similarity index 100% rename from docs/docs/gen/api/delete-node-schedule-cron.RequestSchema.json rename to docs/docs/gen/api/delete-node-schedule.RequestSchema.json diff --git a/docs/docs/gen/api/delete-node-schedule.StatusCodes.json b/docs/docs/gen/api/delete-node-schedule.StatusCodes.json new file mode 100644 index 000000000..c0776d0fc --- /dev/null +++ b/docs/docs/gen/api/delete-node-schedule.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Scheduled entry deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Scheduled entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"ScheduleMutationResult"}}},"required":["results"],"title":"ScheduleDeleteResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Scheduled entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error deleting scheduled entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/delete-node-schedule.api.mdx b/docs/docs/gen/api/delete-node-schedule.api.mdx new file mode 100644 index 000000000..44cf8e819 --- /dev/null +++ b/docs/docs/gen/api/delete-node-schedule.api.mdx @@ -0,0 +1,70 @@ +--- +id: delete-node-schedule +title: "Delete a scheduled entry" +description: "Delete a scheduled entry from the target node." +sidebar_label: "Delete a scheduled entry" +hide_title: true +hide_table_of_contents: true +api: eJztWG1v2zYQ/ivEYR9ajLKdzulWA/vgoimWoRmKNkWBZZ5Bi2eLiUSq5CmNa+i/D0dajmN7a9e1wArkkyWb9/bcc+c7rkBjyL2pyTgLI3iGJRIKJUJeoG5K1AIt+aWYe1cJKlCQ8gskYZ3G3h8WJJBaBBhdwOu1xPRMWbXACi1Nxy9Pp52mqavRK7YTYCJh83aqN3Z/cxo7NSAhYN54Q0sYXazgKSqPftxQwcY6paP33hDCpJ1IqJVXFRL6EAWsqhBGULhA8VGC4QhrRQVI8PiuMR41jMg3KHdgOE9BqgVaEp0GKTwG9NeohXcNGbsQ16psUDyYKruUYqrK8qEUzotSzbAUAUvMyXnx4AqXo3j0YYLsJnOqNlnuNC7QZnhDXmUJxxVcq9JoRex756SsjP35SMZfpikB0MoIQqVYhpY1nw/kjV2AhMrYF2gXjNVR28oNGP8aiNc7NGAFPXHWBBK5s6SMFc6WS6HKulC2qdCbXOSF8irnREjRWI0+5M5jkEJZLYplXaAN/wWIT4+dSUGEnkP580JlH8bZ74PsyTSbfP8dtEwaj6F2NmC0+Ggw4I9/hkBHquoeSGAI0BLLqLouTR4J3b8MLLja99HNLjEnkFB7pj+ZZPbSzaZGH4pl7nylCEbQNEbDHksLFJduJk6fiSagFuRE7V2OIQgqTBCMGgZiT/FGVXXJuo+PB/jTcDDI8NGTWTY80sNM/Xj0OBsOHz8+Ph4OB4PBgAH2GJqSwpZXynu1ZPYQVuFQVHe9exUVCDcXSuTeWZF7VIRSNLWOn86vsRSbXiDmzgtnMdZcbw+oTS0fgOqu8V/WJ9k8d61UyVQo6iBivBikje1epBUpasIh/WibijuPu+K8KFMiJyRcmbqOT2QqdA1xa9vPUlLbOXM33OhFireV8GnhHSxLFs8LZRe4zaWZcyUqu6fibYFUoN9xqHLazA1qEZaBsIqOJ83ovfMf9+yEj4kKQ1ALFGYb/QRaD9p2u+tcbHfoNfwThpMiXbtIzxqKHiZWQburpKPrAdH03/JqXegs2koYHir1p0p3RSMyse4/DEsM/gtW/CeCORZb7x17omyissvzxvvUi24r/HnEmbuBR/IGrzv+xTxqJGXKgxTfMa614UdVirWMUDPX0K0TB83qBtm0RXrv/JVYl0Uip9Pb3DaWcIH+YFtLQbLAHSPHgwEnr8twJNteYo/2E/vGqoYK580H1CIT45en4gqXYkOg+8R+C4n9YT+xz52fGa3Rikyc2tDM5yY33Gxq9JUJIU6b99n9FrI7/PjoZR2JuWvslxy+7nP61XJ6fOg/Ng0IcfDjDWpnz7xP7P8/sa2ECqlwvLenAR5k2iZH0Fe16fPdQH/VjXVtv8txfxXf42bvr9OePrld87naq5S77WV/E0tBVMN684uTbTwEcv3wvNuVfn17HmdMY+cuiq8jGccp9PZ2gscAkMCOJFCOeoNe3H1qF6hSkW3rxfnv7kV2gV3dsvez7lJSpIQ31K9LZSx70/iSFSeEL0DVBiSwDEgYbQ/Ptzcno/jVRMbZmoVWq5kK+MaXbctfv2vQLxP618obNWOALlagTeBnDaO5KsPubcB2cA9erWenh+IrX5YcxKRbSS1nIJ6GEYCEK1xu3/nw1cdnxfSV7z0+I6YUz6SVUKDS6GO+0k/jPMeatoT22ibfdGxq9tnJi5PzE5Cg7tbXTj1FAwd9Wq3SiXN3hbZtNy4Sv7OPbfsX5VkQBg== +sidebar_class_name: "delete api-method" +info_path: gen/api/agent-management-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Delete a scheduled entry from the target node. + + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron-by-name.ParamsDetails.json b/docs/docs/gen/api/get-node-schedule-by-name.ParamsDetails.json similarity index 56% rename from docs/docs/gen/api/get-node-schedule-cron-by-name.ParamsDetails.json rename to docs/docs/gen/api/get-node-schedule-by-name.ParamsDetails.json index 748479206..1bf06c373 100644 --- a/docs/docs/gen/api/get-node-schedule-cron-by-name.ParamsDetails.json +++ b/docs/docs/gen/api/get-node-schedule-by-name.ParamsDetails.json @@ -1 +1 @@ -{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Cron entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file +{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Scheduled entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron-by-name.RequestSchema.json b/docs/docs/gen/api/get-node-schedule-by-name.RequestSchema.json similarity index 100% rename from docs/docs/gen/api/get-node-schedule-cron-by-name.RequestSchema.json rename to docs/docs/gen/api/get-node-schedule-by-name.RequestSchema.json diff --git a/docs/docs/gen/api/get-node-schedule-by-name.StatusCodes.json b/docs/docs/gen/api/get-node-schedule-by-name.StatusCodes.json new file mode 100644 index 000000000..163fa6306 --- /dev/null +++ b/docs/docs/gen/api/get-node-schedule-by-name.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Scheduled entry detail.","content":{"application/json":{"schema":{"type":"object","description":"Collection response for a single scheduled entry get operation.","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"A scheduled entry.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that reported this entry."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Scheduled entry name."},"object":{"type":"string","description":"Object store name for the deployed content."},"schedule":{"type":"string","description":"Cron schedule expression. Present for /etc/cron.d/ entries.\n"},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries.\n","enum":["hourly","daily","weekly","monthly"]},"source":{"type":"string","description":"Where the entry lives: \"cron.d\", \"hourly\", \"daily\", \"weekly\", or \"monthly\".\n"},"user":{"type":"string","description":"User the scheduled entry runs as."},"error":{"type":"string","description":"Error message if the agent failed to retrieve this entry."}},"required":["hostname","status"],"title":"ScheduleEntry"}}},"required":["results"],"title":"ScheduleGetResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Scheduled entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error retrieving scheduled entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-by-name.api.mdx b/docs/docs/gen/api/get-node-schedule-by-name.api.mdx new file mode 100644 index 000000000..b39d44ce1 --- /dev/null +++ b/docs/docs/gen/api/get-node-schedule-by-name.api.mdx @@ -0,0 +1,70 @@ +--- +id: get-node-schedule-by-name +title: "Get a scheduled entry" +description: "Get a specific scheduled entry by name on the target node." +sidebar_label: "Get a scheduled entry" +hide_title: true +hide_table_of_contents: true +api: eJztWG1v2zYQ/isHYh8SjH5J53SrgX1wu7bLsHZBm6LAEs+gxbPFWCJVknKjGvrvw5GS47ctWYsCK5BPkmze2/PcHclbMYkusarwymg2ZC/RgwBXYKJmKgGXpCjLDCWg9raCaQVa5AhGg08RvLBz9KCNxO6VZpx5MXdseMneNnKTV0KLOeao/WR0fjZp9U1MgVaQTcfGnK2/zmT04bWR2Op4Wr0WOTLOHCalVb5iw8sVe4rCoh2VPiV7rd6hRSHZuB5zVggrcvRoXVhPbrMhS43zOqpTFG8hfMo4s/ihVBYlG3pbIt8B5SKGKeaoPbQaOFh0aJcowZrSKz2HpchKhKOJ0BWHiciyYw7GQiammIHDDBNvLBwtsBqGpccRtJuOEYXqJEbiHHUHb7wVnYjkii1FpqTw5HvrJM+V/vmEh38mkQJW84BBLkjGVwWtd94qPWec5Ur/jnpOUJ3UNV+D8Z+BeLuTDqSgC69K5yEx2gulweisApEVqdBljlYlkKTCioSI4FBqidYlxqLjILSEtCpS1O5LgLh/7JQU3qOlUP66FJ1Po86f/c6TSWf8/XespqSx6AqjHQaLj/p9evw7BBK9UFmXcUYIoPYkIooiU0nI6N61I7nVvotmeo2JZ7sYPzMZJYoyGlpvYGYsVaXS8wz3apJSc11A5Ehh6dOrGMW1mU6UPATNzNhceDZkZanknh8XKcK1mcLZL1A6lOANFNYk6Bz4VDkgEtB5Mog3Ii8y0n162sefBv1+Bx89mXYGJ3LQET+ePO4MBo8fn54OBv1+v098WXRl5t2GV8JaUVEyeszd3SiNdmHYD3xd6gdC31b2a7MSzCy0tVjoPhUeLBbGegqfYm4sUcJ54Ut3SDXqMqeWZBYEsVAZErZuoYoivHmVoyk9tb19wKPa1o81qyEBggcUVHDgfpEdLFgSb2C9U8EfYR04byzG1h9dQZBYZKZCCU3ed9s6JHt3K35mjV5zCHhTWHSOEhjOqa9qHwz10Ce9xBrdlb0QgsLQK2rqWh7tUmR3mzpHq4xUCbQicJSa0mYVBykUPT4iLuiZG+3TrDr+JydWrYZ6y5tb0qNe8oAUM86iZupDUTUbE0qmtMk9MHqfosUAdmQvU0t0Q7hiEZErxuGqMRnfg9X4Gg3Tu7Fw1Zq/Yg16pUN7twPvHEayd3uOLbUD4QLnaK25h67ntAxydE7MEdRmpcUqoQ5jkUBd4na51Zv70uXmHt6U4ZjKyocO1Gb8c5Jl9a5s23gOSLxE/6ZpuCRXczY4tAE8FbLtfdCBZleiGg04fNFGsN2/7onrCDa+284RZGMHM0lSWotyu1G/2Ic8YhkojZvawfa2Y1xKRa8iazZCB2JqSn/rxEGzskQyrdF/NHYBTUsMpmnz37BLBTdHe3B3ikGSwJaR036fyGvpDXm3R+zJPrHvtCh9aqz6hBI6MDo/gwVWsM6eB2K/BWJ/2Cf2hbFTJSVq6MCZduVsphJFfadAm6uw67gHdr8Jdgd3H8i1oV271PKhFX8LnJ4e2mPjWaGBg27WBw77D9T+v6mtOcvRp4YmOjSh4HHEMGQ9UagejYx6q/YkV/dagnur8B2mPXYZhzfj29EPFXseidscAK0DSb0vWDMOoO9pWMR48/KivfH+9v4iHCuVnpkg3oQxCufR26EVnQIYZ+RIROSk2++GG2xhnM9FSLVmmtKMzrYzdRfS1W3efvGsLYbs8cb3ikyoeK634UIUob5kolCMM5JhnA03D87tRY2zYfhpzMO5moRWq6lw+M5mdU0/fyjRVpGGpbBKTAmpyxWTytG7ZMOZyNzurGgz0KM3zRnqGL7yKO0gJu2EQRMbYTUbMsbZAqvNiSANxj4rpq88FfuMmGI8dNVMUUi66V2umr9GSYKF3xDaa540B1tX7svnF4wzsV1lO1UVtB90aLWKKy7MAnVdr/3z9E0O1vXfM0LQXg== +sidebar_class_name: "get api-method" +info_path: gen/api/agent-management-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Get a specific scheduled entry by name on the target node. + + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron-by-name.StatusCodes.json b/docs/docs/gen/api/get-node-schedule-cron-by-name.StatusCodes.json deleted file mode 100644 index 8ec5ff3fc..000000000 --- a/docs/docs/gen/api/get-node-schedule-cron-by-name.StatusCodes.json +++ /dev/null @@ -1 +0,0 @@ -{"responses":{"200":{"description":"Cron entry detail.","content":{"application/json":{"schema":{"type":"object","description":"Collection response for a single cron entry get operation.","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"A cron drop-in entry.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that reported this entry."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Cron entry name."},"object":{"type":"string","description":"Object store name for the deployed content."},"schedule":{"type":"string","description":"Cron schedule expression. Present for /etc/cron.d/ entries.\n"},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries.\n","enum":["hourly","daily","weekly","monthly"]},"source":{"type":"string","description":"Where the entry lives: \"cron.d\", \"hourly\", \"daily\", \"weekly\", or \"monthly\".\n"},"user":{"type":"string","description":"User the cron entry runs as."},"error":{"type":"string","description":"Error message if the agent failed to retrieve this entry."}},"required":["hostname","status"],"title":"CronEntry"}}},"required":["results"],"title":"CronGetResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Cron entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error retrieving cron entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx b/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx deleted file mode 100644 index 1396c6e0f..000000000 --- a/docs/docs/gen/api/get-node-schedule-cron-by-name.api.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: get-node-schedule-cron-by-name -title: "Get a cron entry" -description: "Get a specific cron drop-in entry by name on the target node." -sidebar_label: "Get a cron entry" -hide_title: true -hide_table_of_contents: true -api: eJztWG1v2zYQ/isHYh8SjIqdzulWA/vgbm2XYe2CLkWBJZ5Bi2eLsUSqJOVGNfTfhyMlx7HdJWtXYAXyyZLFe3vu7iF5KybRpVaVXhnNhuwFehDgSkzVTKWQWqNBWlMmSgNqb2uY1qBFgWA0+AzBCztHD9pIPLrUjDMv5o4NL9gfaYayynHyUmgxxwK1n4zOTiekcmJKtIJMOjbmbP12KqMLr4zETv4na/TT+pUokHHmMK2s8jUbXqzYUxQW7ajyGdkjvUOLQrJxM+asFFYU6NG6sJZcZkOWGed1VKUo3FL4jHFm8V2lLEo29LZCvoXJeQxRzFF76DRwsOjQLlGCNZVXeg5LkVcIBxOhaw4TkeeHHIyFXEwxB4c5pt5YOFhgPQxLDyNg14kRpUpSI3GOOsFrb0USUVyxpciVFJ5875zkhdI/HvPwZRLhZw1nLs2wECTj65LWO2+VnjPOCqV/Qz0nmI6bhq/B+NdAUCraKiDZI3hZOQ+p0V4oDUbnNYi8zISuCrRUPZmwIqUccKi0ROtSY9FxEFpCVpcZavc5GNw/bKoH79FSFH9diOTDKPmznzyZJONvv2EN1YtFVxrtMFh81O/Tz0ejl+iFyo8YZxQ8ak+rRVnmKg113LtyJLLa9c5MrzD1bAdZk1N5KKOhcwRmxlIrKj3PMTZiNE61uO4Y8qG09OpV9P3KTCdK7gNkZmwhPBuyqlJyx4XzDOHKTOH0Z6gcSvAGSmtSdA58phwQ9Og8GcRrUZQ56T456eMPg34/wUdPpsngWA4S8f3x42QwePz45GQw6Pf7fcqSRVfl3m14JawVNVWfx8LdDdBoDxXtxr5u7z3R39b3S7sSzCzQWGxunwkPFktjPSFAYbeWqNK88JXbpxp1VRAFmQWhLFSOBK9bqLIMT14VaCpPVLeLeVTb+bFObEh/8ICCCg7cL7LtJiXJFtQ7ZX8P68B5YzGyfPQCQWKZmxoltAV/1PUeUfQ9neqWA16XFp2j8oUzolHtg6Ee+rRHeT6SvRCCwsAPDZGUR7sU+d2mztAqI1UKnQgcZKayec1BCkU/7xEX9FsY7bO8PvyYE6tOQ3PLm5t8R73kASlmnEXNxD1RNRsTSqay6T0wepuhxQB2zF6uluiGcMkiIpeMw2VrMj4Hq/ExGqZnY+GyM3/JWvQqh/ZuB944jMneIBtbaQfChXSjteYeap7RMijQOTFHUJv9FXuDqMUi4bnE203WbO5AF5u7ddt8Y2omH6iHSuoZybFmW65jm63VL9C/bsmVZBrOBvt4/qmQHdlBAu3mQx0Z4v8s0r/NVvfEcwQb7x1PBNnIVyZNK2tR3mbm57tQRwxDKuMGtpfMtoxLqehR5O2m50BMTeVvnNhrVlZIpjX698YuoCXAYJr2+A271GNztHu3oxgkCdwyctLvU/K61IZ620ns8W5i32hR+cxY9QElJDA6O4UF1rCunIfEfg2J/W43sc+NnSopUUMCp9pVs5lKFfFNibZQYaNxD9n9KrI7+Mdztza0R1daPrDw15DOk33bazwetHDQtfnmtPGQ1f9/VhvOCvSZoUkNTR54HB0MWU+UqkdjoN6qO7c1ve7IHw7UvVX4M4xx7DJOZsY3Mx0a+BQxe5uTnXU0mfclay/89D4NixhvH553t9tf356Hk6TSMxPE21hG4Qh6M42iAwDjjByJsBwf9Y/CbbU0zhci1Fs7KoljsZtK3YZ0dVO3/8UILQbs8dr3ylyoeIa34fIT0b5golSMM5JhnA03T8rdpYyHiwN9DV/GPJynSXa1mgqHb2zeNPT3uwptHXOxFFaJKcF1sWJSOXqWbDgTudueBm2GfPC6PUMdwhcelu2FphspaMpLWM2GjHG2wHpz5kejr0+K6cvNvT4hnBgKXSwzFJLudRer9tMoTbH0G0I7DEqTrnX7vnh2zjgTt7tsq6uC9r0OrVZxxblZoG6atX+e3snBpvkbDPLAHg== -sidebar_class_name: "get api-method" -info_path: gen/api/agent-management-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; -import Translate from "@docusaurus/Translate"; - - - - - - - - - - -Get a specific cron drop-in entry by name on the target node. - - - - Request - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron.StatusCodes.json b/docs/docs/gen/api/get-node-schedule-cron.StatusCodes.json deleted file mode 100644 index 85edfd12f..000000000 --- a/docs/docs/gen/api/get-node-schedule-cron.StatusCodes.json +++ /dev/null @@ -1 +0,0 @@ -{"responses":{"200":{"description":"List of cron entries.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"A cron drop-in entry.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that reported this entry."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Cron entry name."},"object":{"type":"string","description":"Object store name for the deployed content."},"schedule":{"type":"string","description":"Cron schedule expression. Present for /etc/cron.d/ entries.\n"},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries.\n","enum":["hourly","daily","weekly","monthly"]},"source":{"type":"string","description":"Where the entry lives: \"cron.d\", \"hourly\", \"daily\", \"weekly\", or \"monthly\".\n"},"user":{"type":"string","description":"User the cron entry runs as."},"error":{"type":"string","description":"Error message if the agent failed to retrieve this entry."}},"required":["hostname","status"],"title":"CronEntry"}}},"required":["results"],"title":"CronCollectionResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error listing cron entries.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron.api.mdx b/docs/docs/gen/api/get-node-schedule-cron.api.mdx deleted file mode 100644 index 1d17268cd..000000000 --- a/docs/docs/gen/api/get-node-schedule-cron.api.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: get-node-schedule-cron -title: "List all cron entries" -description: "List all cron drop-in entries on the target node." -sidebar_label: "List all cron entries" -hide_title: true -hide_table_of_contents: true -api: eJztWN1v2zYQ/1eIe0oA+SOd020C9uB2bZeh3YIuRR/iwKDFs8VYItUj5cYz9L8PR0qOv4YGw/pQoE+iLN4Hf7+74503oNBlpCuvrYEU3mrnhSwKkZE1QpGtetoINJ40OmGN8DkKL2mBXhirsD8xkICXCwfpLfyV5ajqAqfvpJELLNH46fj6asrKprZCkmzGwV0C27crBSm8Qf+HVdjJvyTLah1mNWm/hvR2Ay9QEtK49jlbYo0poVRw19wlUEmSJXokF/YaWSKkkFvnwzIBzYerpM8hAcJPtSZUkHqqMTlA4CYeTi7QeNFpSAShQ1qhEmRrr81CrGRRozibSrNOxFQWxXkiLIlCzrAQDgvMvCVxtsR1GraeR6geelZWupdZhQs0PXzwJHsRvw2sZKGV9Ox752RSavPLRRK+TCPw0CTgshxLyTJ+XfF+50mbBSRQavMWzYJhumgYG0JXWeMwWHg2HPLjBOl2Hjlvue5DApk1Ho1nAVlVhc4CYYN7x1KbYx/s7B4zDwlUxPR6HW3e29lUq1O+zi2V0kMKda0VHDGRo7i3M3H1q6gdKuGtqMhm6JzwuXaCIULn2VN8kGVVsO7LyyH+NBoOe/js51lvdKFGPfnjxfPeaPT8+eXlaDQcDocMIKGrC+92vJJEcs2h4rF0p0617934OEXW/aOzb0PwxOn39f3W7mQiOMliAPpcekFYWfKMAB+7tcRB4KWv3SnVaOqS08QuGWWpC2R43VJXVVh5XaKtPSfiMeZRbefHNlHF3FL0gA8VHHjayV52YbUWLBAkW1C/KPtn2Cect4RBuvUChcKqsGtUoo3SfpcWXECe6FS3XeBDReictqYvrjnVjQ+GBuizAfPcV4NtZkwMm9LGI61k8WVT10jaKp2JTkSc5bamYp0IJTU/PiMu+Vla4/Niff5vTmw6Dc2eN498R73sASuGBKJmLgtRNdwxSram7AkYfcyRMIAd2Sv0Cl0qJhARmUAiJq3JuA5W4zIa5rUlMenMT6BFr3ZIX3bgg8NIdvYYQlQbJ6QLdCORfYKaV7xNlOicXKDQu/kVc4NLCyHjucL9JGt2r4vb3RulTb47TiYfSg+H1CuWg+ZQrqs2B7tf2oLvCW3N+7ZIs2iTwOhUmX4hVVfzRE+0dwUnZoDhfyzYT4R1LHbeu3IRZGPZsllWE6HaL9CvjxGPUAZGFXqpi5M17cC4UpqXshCtjJAzW/tHJ06aVTWyaYP+s6WlaOtgMM1X8o5dTrUF0slbKR6SBfaMXA6HTF7HcAi7I2Ivjon9YGTtc0v6b1SiJ8bXV2KJa7ENoO/EfgvE/nBM7GtLM60UGtETV8bV87nONJedCqnU4b5x39n9Bti9PFWP47VSaBfmga/UPH8n9SuR2iRQos8tj588VCVxPExhICs94Nl2sOmu+2bQdYqhDwujKa3itHn3OKfy+FpG2nan1e0xcu8raGc3fp+FTZC0i9fdNPT7x5vQeWgzt0G8PcQ4tCyPszXfFJAAOxLxuOgP+2G6qazzpQyB1s7C+4N9G6eHgG4eo/a//hMQT+rxwQ+qQurY7FHokiO+tyArDQmwDCSQ7rZUXfeehA6TuyX+yjKbzUw6/EBF0/DPn2qkdQR/JUnLGeNzuwGlHa8VpHNZuMPZfvd4Z+/b2/VcfOWJ/yQk3cxpuDcPuyEFSGCJ690/Lhpu13OUirvl2037eZxlWPkdwaMCw3P/NrrfvLqBBOR+LB7EXtB+0qnNJu64sUs0TbP10fM7O9g0/wB421RV -sidebar_class_name: "get api-method" -info_path: gen/api/agent-management-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; -import Translate from "@docusaurus/Translate"; - - - - - - - - - - -List all cron drop-in entries on the target node. - - - - Request - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule-cron.ParamsDetails.json b/docs/docs/gen/api/get-node-schedule.ParamsDetails.json similarity index 100% rename from docs/docs/gen/api/get-node-schedule-cron.ParamsDetails.json rename to docs/docs/gen/api/get-node-schedule.ParamsDetails.json diff --git a/docs/docs/gen/api/get-node-schedule-cron.RequestSchema.json b/docs/docs/gen/api/get-node-schedule.RequestSchema.json similarity index 100% rename from docs/docs/gen/api/get-node-schedule-cron.RequestSchema.json rename to docs/docs/gen/api/get-node-schedule.RequestSchema.json diff --git a/docs/docs/gen/api/get-node-schedule.StatusCodes.json b/docs/docs/gen/api/get-node-schedule.StatusCodes.json new file mode 100644 index 000000000..383dc2590 --- /dev/null +++ b/docs/docs/gen/api/get-node-schedule.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"List of scheduled entries.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"A scheduled entry.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that reported this entry."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Scheduled entry name."},"object":{"type":"string","description":"Object store name for the deployed content."},"schedule":{"type":"string","description":"Cron schedule expression. Present for /etc/cron.d/ entries.\n"},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries.\n","enum":["hourly","daily","weekly","monthly"]},"source":{"type":"string","description":"Where the entry lives: \"cron.d\", \"hourly\", \"daily\", \"weekly\", or \"monthly\".\n"},"user":{"type":"string","description":"User the scheduled entry runs as."},"error":{"type":"string","description":"Error message if the agent failed to retrieve this entry."}},"required":["hostname","status"],"title":"ScheduleEntry"}}},"required":["results"],"title":"ScheduleCollectionResponse"}}}},"400":{"description":"Bad request - validation error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error listing scheduled entries.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/get-node-schedule.api.mdx b/docs/docs/gen/api/get-node-schedule.api.mdx new file mode 100644 index 000000000..fd7cf454a --- /dev/null +++ b/docs/docs/gen/api/get-node-schedule.api.mdx @@ -0,0 +1,70 @@ +--- +id: get-node-schedule +title: "List all scheduled entries" +description: "List all scheduled entries on the target node." +sidebar_label: "List all scheduled entries" +hide_title: true +hide_table_of_contents: true +api: eJztWEtvGzcQ/ivEnGyAejiV01ZAD06apC6S1kgc5GAbArUca2ntkpshV7Eq7H8vhtyV9QpsFM0hQE7LlTiv75sZcnYFGn1GpgrGWRjDW+ODUEUhfJajrgvUAm0gg144K0KOIiiaYRDWaexfW5AQ1MzD+Ao+tBKTd8qqGZZow+Ts4nzSaZq4CkmxHQ83EtZv5xrG8AbDX05jpwMkeMxqMmEJ46sVvEBFSGd1yNlSp3FMqDTcNDcSKkWqxIDk436rSoQx5M6HuJRgOLpKhRwkEH6uDaGGcaAa5Q4ElylANUMbRKdBCkKPtEAtyNXB2JlYqKJGcTRRdinFRBXFsRSORKGmWAiPBWbBkTia43Ictx4nuO57TlWmlzmNM7Q9vA+kegnDFSxUYbQK7HvnpCyN/e1Exn8mCXxoZMSgVCwTlhXv94GMnYGE0ti3aGcM1UnD2BD6ylmP0cKz4ZAfB1h3t/uk90FC5mxAG1hKVVVhssja4M6z6GrfETe9wyyAhIqY42CS4Ts3nRh9yOFbR6UKMIa6Nhr26MhR3LmpOP9d1B61CE5U5DL0XoTceME4oQ/sKd6rsipY9+npEH8ZDYc9fPbrtDc60aOe+vnkeW80ev789HQ0Gg6HQ0aR0NdF8BteKSK15HwJWPpDUW17d7aD2bK/F/g6CQ+Evq3sj3YnU8GlllIw5CoIwspR4PA55tYSp0FQofaHVKOtSy4WN2eIlSmQsfVzU1VxFUyJrg5civuAJ7WdH+tSFbeOkgccVHTgaZF92AZJsFQUb2F9VMHfcZ/wwRFG6dYVFBqrwi1RizZP+111xD7yqOKX5OyaQ4H3FaH3xtm+uOCKtyEaGmDIBhk529eDdW1cWzZlbEBaqOJxUxdIxmmTiU5EHOWupmIphVaGH18Q5/wsnQ15sTz+mhOrTkOz5c0D6Ukve8CKQULSzN0hqYYbRsnVlD0Bo085EkawE3uFWaAfi2tIiFyDFNetybSOVtMyGea1I3Hdmb+GFr3aIz3uwEePieydYhNUWy+Uj5wjkXuCrle8TZTovZqhMJuVlqqEOwwhg7rA7XJrNo+Oq83TpS3DGy6rEDtQl/GvWBaaXdmu8RyQeOkKPjuMs+/bxs3ijYTRodb9QumuBYqeaM8PLtUIx//Yv58I75nYeO8aSJRNjcxlWU2Eertfv95HPkEamdUYlCkOdrkd41obXqpCtDJCTV0dHpw4aFbXyKYthi+O5qLtjNE0H9MbdrnuZkgHD6kUJAtsGTkdDpm8juWYfnvEnuwT+9GqOuSOzD+oRU+cXZyLOS7FOol+EPs9EPvTPrGvHU2N1mhFT5xbX9/emsxw+6mQShMPH/+D3e+A3dND/TgdL4XxcUb4lhfqH8x+I2YbCSWG3PFcytOWTHPjGAaqMgMefAer7uxvBn5zZKVFmkBvHuZXPtbLxNjmFLuOIA+hgnae4/dp3ASyXbzuhqM/P13GG4ixty6Kt/6fxavLw8zNJwVIYEcSFCf9YT8OO5XzoVQxx9r5+OvT/i6gq4es/U/fCFKsAe/DoCqUSXc/ipfmBO4VqMqABJYBCePNy1WH8I2Mdy7evFpNlcePVDQN//y5Rlom3BeKjJoyNFcr0MbzWsP4VhV+d9TfDOrofXuwHotv/AHgIBbd9Gn5jh53wxhAwhyXm98xGr6256g035qvVu3fZ1mGVdgQ3Gsr/BlgndNvXl2CBLWdhjtpF7UfdGq1Sjsu3Rxt06x9DPzODjbNv9I+XJk= +sidebar_class_name: "get api-method" +info_path: gen/api/agent-management-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +List all scheduled entries on the target node. + + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule-cron.RequestSchema.json b/docs/docs/gen/api/post-node-schedule-cron.RequestSchema.json deleted file mode 100644 index 0a34c61ce..000000000 --- a/docs/docs/gen/api/post-node-schedule-cron.RequestSchema.json +++ /dev/null @@ -1 +0,0 @@ -{"title":"Body","body":{"description":"Cron entry creation parameters.","required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","object"],"properties":{"name":{"type":"string","description":"Name for the cron drop-in entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,max=64"}},"object":{"type":"string","description":"Name of the uploaded file in the object store to deploy as the cron entry content.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"}},"schedule":{"type":"string","description":"Cron schedule expression (e.g., \"*/5 * * * *\"). Mutually exclusive with interval — provide exactly one.\n","x-oapi-codegen-extra-tags":{"validate":"required_without=Interval,excluded_with=Interval,omitempty,cron_schedule"}},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one.\n","enum":["hourly","daily","weekly","monthly"],"x-oapi-codegen-extra-tags":{"validate":"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"}},"user":{"type":"string","description":"User to run the command as. Only applies when using schedule (cron.d entries include a user field).\n"},"content_type":{"type":"string","description":"Content type: \"raw\" or \"template\". When \"template\", the file content is rendered through Go text/template with agent facts and user-supplied vars.\n","enum":["raw","template"],"x-oapi-codegen-extra-tags":{"validate":"omitempty,oneof=raw template"}},"vars":{"type":"object","additionalProperties":true,"description":"Template variables. Only used when content_type is \"template\".\n"}},"title":"CronCreateRequest"}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule-cron.StatusCodes.json b/docs/docs/gen/api/post-node-schedule-cron.StatusCodes.json deleted file mode 100644 index 4a72727e0..000000000 --- a/docs/docs/gen/api/post-node-schedule-cron.StatusCodes.json +++ /dev/null @@ -1 +0,0 @@ -{"responses":{"200":{"description":"Cron entry created.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Cron entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"CronMutationResult"}}},"required":["results"],"title":"CronCreateResponse"}}}},"400":{"description":"Invalid request payload.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error creating cron entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule-cron.api.mdx b/docs/docs/gen/api/post-node-schedule-cron.api.mdx deleted file mode 100644 index aa364fa49..000000000 --- a/docs/docs/gen/api/post-node-schedule-cron.api.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: post-node-schedule-cron -title: "Create a cron entry" -description: "Create a new cron drop-in entry on the target node." -sidebar_label: "Create a cron entry" -hide_title: true -hide_table_of_contents: true -api: eJztWNtuI7kR/ZUCn+xF6+KNPUkEzIN3s5M42Nk1Zj2YB9sQqGZJzTGb7OVFckdoIB+RL8yXBEV2q1uXrCezCZAFBgYsqZssVp1TN9aWCXS5lZWXRrMZ+9Yi9wgcNG4gt0aDsKYaSQ2ova3BaPAFgud2hR60ETh+0Cxjnq8cm92zn/ICRVA4f8s1X2GJ2s+vb2/mJGpuKrScDnLsMWO7XzeCzditcf4HI7AT8K01JNdhHqz0NZvdb9k3yC3a6+ALOopEzjZWemSPzWPGKm55iR6ti4s1L5HNWGGcj18zJsnAivuCZcziz0FaFGzmbcDsAIW7ZB5fofbQScjAokO7RgHWBC/1CtZcBYSzOdd1BnOu1HkGxoLiC1TgUGHujYWzJ6xncel5Aut5ZHglR7kRuEI9wmdv+SghuGVrrqTgnnTvlMxKqV9fZPHNPEHPmoy5vMCS0x5fV7TeeSv1imWslPp71CvC6aIhbEgSOv+NETWtP+TcdPTmRL80GnowxyfQyo32qD2J4lWlZB43TT46krc9VswsPmLu9wTds5aV9h0RaMklvMSIQ+Lv2LZ93X/gJcLS2OiVx/46hvcOBXAX3y+lQiC5ELRACxP0+YQ2jcWEeOt/b6X2aNdcNZNfRVnJn1+/umRNs7Pz0ywyy6hwqJThAkXSXKbYS4LAeWMRvAGBlTJ1Z2M+IDOx9GsMiJq7NiRf1j16Urcc8Lmy6By50xmOV+MMHthXkyv4Kv09sPMxvA0+cKVqwOdcBSfXCBvpC+jwh3/+/R9QWbOWggTy3CtKQvh5Rs1Jtgn+9U0rPovHivZN/9iU0mNZ+TqLiWuHAMHRqfYyHLdopREy7605K0ywqs5AcEkfG8Qn+iyN9oWqz8dwq3iOicokimg/7Zj/FrwdA78IHupQUhwmlUh50ollLClFaSRpRbH52Uh3+fwA6d3jHmmj0SxfJ20SPi08HToR/eDQvoz8e4eWYsOGFDO5KUuuKRGM4UetaohpCx1sCtQQHCXzHWpnKSXEKKI1UkfNgQMdDkuJSsRM3uwy4Typ82J8pNVAq2bwwCzfPDDKPA+MQFDc4wMbwwdSavgo69NXeyBIBxYpi6EAX1gTVgX82YDHZz/pNiZvSFVsyXPvgDAgI0YuRAAErLl1+/5g+YYKeivjPyH/kEvLN7CTQ+TRYafKAhdCEkRc3Q5qwMnK3Jm25lbyhcKO0EB5PrI5pIRg2sOWWGsy5qWnfBYTVmp53qUKyZqG3lt0ldEuVaKvp9OXiyYKKpSfXRj3a99Hs5hLccqflsaW3LMZC0GKI/+6KxA+mgXc/Cnh4Q2Ff46OEkr0mGgkaYrPvKwiBldXU/zD5XQ6wq//uBhdXojLEf/9xavR5eWrV1dXl5fT6XTKEiZB+SF/3FpOeYJYP8nrvnbvogCqbTyVqQRcBqES8dNYEKjQI+x6w1jbjcbYhY2PgNp1dy+G3l/alV1pTVHhC+47iGIgSdefPY5Nluc+uFPyu3gxT8QLlwqJEPckqyp+87JEE2Jnc8xSEtsps29u1CLZ22Sf2AcN3JE2xJ15wfUKh260MEYh10e7PxToC7QHupRGyCXlCFc7j2XUOUlGa80nZOHvaBmU6BxfIcgh8AmvMUvB1jeFg3a9Rf5xP1rfBh+1S87EmkMBnZc+ng7yFNZtlF+eCuwbHTNaFytQ8ZqasP9idH8ietcw+N15Styb3NbkebA25Z0+mt9EYGPtQypf687XInECPZfqpDsfHL7LyNDuAb4wwfdKnDxWhNiSavQbY5+gDYHkjUYM/Zj6mBXakyksGUkb9g65mk6HuTt61xGjF8eMvtc8+MJY+TcUMILr2xt4whp2XvOF2N8Csb87JvaNsQspBGoYwY12YbmUuaTsUqEtZbx5uC/s/gbYvTqViFP1SBMJvRpcbL+k4v9/TpuMlegLQ6O9yriIPE3eZmzCKzmhweFk2xX7ZtLdveIlN4797DoN8h77GSDdGcvE23ASuLOj8L5i7VgsdjtxEcvaL2+61vmvH+5i30HO8q4fjH3XGbebHe4I6WY3/ZN+JtI/6wcD/Z06XVf7Nfv3xfau1V6L0nBhaaJJLbLXsVvqh6lUvWgHWpdIuhhPx7E9J5RLrgfq72a5fegccrztA+nzR7/JlHjzrBSX8V4cbJyPJM7vGa8kyxjtYRmbDZu8DscsznOpbaO3tGe7XXCH761qGnr8c0BbJ4fo7n5xziuko++CzZZcucML49DAs3dtxT+H//GA9yQk3aVJ15FyFegXy9gT1sM5dfPYZKxALshx7rft63ZyMLojIf32o9zXZN2O6zzHyv/i2sdBkN7++NMdhUo7IS5jimj9k/5HVU2VpvezbXq2ZYrrVeArWptkkhPz/bg8iMNo1Ukwttu04s48oW6aHTaefhMwTfMvS7ShiA== -sidebar_class_name: "post api-method" -info_path: gen/api/agent-management-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; -import Translate from "@docusaurus/Translate"; - - - - - - - - - - -Create a new cron drop-in entry on the target node. - - - - Request - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule-cron.ParamsDetails.json b/docs/docs/gen/api/post-node-schedule.ParamsDetails.json similarity index 100% rename from docs/docs/gen/api/post-node-schedule-cron.ParamsDetails.json rename to docs/docs/gen/api/post-node-schedule.ParamsDetails.json diff --git a/docs/docs/gen/api/post-node-schedule.RequestSchema.json b/docs/docs/gen/api/post-node-schedule.RequestSchema.json new file mode 100644 index 000000000..382959e3e --- /dev/null +++ b/docs/docs/gen/api/post-node-schedule.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"description":"Scheduled entry creation parameters.","required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","object"],"properties":{"name":{"type":"string","description":"Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,max=64"}},"object":{"type":"string","description":"Name of the uploaded file in the object store to deploy as the scheduled entry content.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"}},"schedule":{"type":"string","description":"Cron schedule expression (e.g., \"*/5 * * * *\"). Mutually exclusive with interval — provide exactly one.\n","x-oapi-codegen-extra-tags":{"validate":"required_without=Interval,excluded_with=Interval,omitempty,cron_schedule"}},"interval":{"type":"string","description":"Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one.\n","enum":["hourly","daily","weekly","monthly"],"x-oapi-codegen-extra-tags":{"validate":"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"}},"user":{"type":"string","description":"User to run the command as. Only applies when using schedule (cron.d entries include a user field).\n"},"content_type":{"type":"string","description":"Content type: \"raw\" or \"template\". When \"template\", the file content is rendered through Go text/template with agent facts and user-supplied vars.\n","enum":["raw","template"],"x-oapi-codegen-extra-tags":{"validate":"omitempty,oneof=raw template"}},"vars":{"type":"object","additionalProperties":true,"description":"Template variables. Only used when content_type is \"template\".\n"}},"title":"ScheduleCreateRequest"}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule.StatusCodes.json b/docs/docs/gen/api/post-node-schedule.StatusCodes.json new file mode 100644 index 000000000..9e3c23739 --- /dev/null +++ b/docs/docs/gen/api/post-node-schedule.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Scheduled entry created.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Scheduled entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"ScheduleMutationResult"}}},"required":["results"],"title":"ScheduleCreateResponse"}}}},"400":{"description":"Invalid request payload.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error creating scheduled entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/post-node-schedule.api.mdx b/docs/docs/gen/api/post-node-schedule.api.mdx new file mode 100644 index 000000000..7c3ed473e --- /dev/null +++ b/docs/docs/gen/api/post-node-schedule.api.mdx @@ -0,0 +1,70 @@ +--- +id: post-node-schedule +title: "Create a scheduled entry" +description: "Create a new scheduled entry on the target node." +sidebar_label: "Create a scheduled entry" +hide_title: true +hide_table_of_contents: true +api: eJztWNtuI8cR/ZVCP0nG8CKH2iQE9kF2vIkCry3sarEPkkA0p4ucXs10j/tCakIM4I/wF+ZLguqeGy+xlHUCxMBCgMgZdldXnVO3rh0TaFMjSye1YnP2rUHuEDgo3IJNMxQ+RwGonKlAK3AZguNmjQ6UFji+Vyxhjq8tm9+x9836xVuu+BoLVG5xdXO9aOUsdImG00mWPSSse7oWbM5utHU/aIGtEJYwi6k30lVsfrdj3yA3aK68y+ioVuR8a6RD9lA/JKzkhhfo0NiwQfEC2Zxl2rrwNWGSLCy5y1jCDP7kpUHB5s54TA5guI0m8jUqB62EBAxaNBsUYLR3Uq1hw3OPcLbgqkpgwfP8PAFtIOdLzMFijqnTBs4esZqHpecRsKeR5qUcpVrgGtUIn5zho4jijm14LgV3pHurZFJI9foiCb8sIvysTgIIBac9rippvXVGqjVLWCHV96jWhNVFTdiQJLTuGy0qWr9v7fsDnlNyAqkV9IiOT0CWauVQOZLHyzKXadg0+WRJ6O5YO738hKnbE3THGmqa34hFQ37hJAYwIonHBu4b8AMvEFbaBPc88NoxfLAogNvw40rmCCQUvBJoYIIunaRGq7GYEHP9804qh2bD83rym0gr+NPrVzNW152RLzNHr4LCvsw1Fyii5jJGYBQE1mmD4DQILHNdtTYehm3D02+xIqjfyn3egG+NVp0agE+lQWvJoc5wvB4ncM++mlzCV/Hvnp2P4a13nud5BfiU5t7KDcJWugxaEuCfP/8CpdEbKUggT11O+Qg/z6gFydbevb5uxCfhWNH80r/WhXRYlK5KyCe6RBbgaFV7Ho4bNFILmfbWnGXam7xKQHBJH1vER/ostHJZXp2P4SbnKbZ8kiji/rR3/lvwOgZ+FTxUvqBIjCqR8qQTS1hUirJJ1Iqi87ORbnPMAdLd6x5prVCvXkdtIj4NPC06AX1v0TyP/AeLhgLE+Bg4qS4KrigbjOFHlVcQEhda2GaowFvK6R1qZzEvhCiiNVIFzYEDHQ4ribkICb3ucuEiqvNsfMTVQKvmcM8M394zSj/3jEDIucN7NoaPpNTwVdLnsOZAkBYMUipDAS4z2q8z+KsGh09u0m6M3hCL2YqnzgJhQEaMrA8ACNhwY/f9wfAt1fZGxn9C/iGXhm+hk0Pk0WGnCgMXQhJEPL8ZVIGTBbo1bcON5MscW0I9JfvA5pASgmkPW2KtTpiTjvJZVwFj+/MuFktW17TGoC21srEefT2dvrB+oqCa+dk1cr8MftLLhRSnHGulTcEdmzPvpThytNsM4ZNewvVfIjBOUx5I0VJmCa4TLCVN8YkXZQDj8nKKf5pNpyP8+s/L0exCzEb8jxevRrPZq1eXl7PZdDqdsgiMz92QSG4Mp4RB9J8keF+7d0EAVToOFGsNcAn4UoRPbUBgjg6h6xVDmdcKQ1c2PgKq6/aejcG/NSvbQhvDw2XctRCFiJK2P3scmi7Hnben5LeBox+JFy5zJELsoyzL8M3JArUPTc4xS1Fsq8y+uUGLaG+dvLAlOvRJ2hW2pxlXaxz60lLrHLk6EvExQ5ehOVCo0EKuKGPYyjosguJRMhqjX5CTv6NlUKC1fI0gh+hH0MYshl3fJA56+Ab+h+PYfetd0DB6FasPhbTuemJrG/Yx0Ju4n50K9WsV8lwbOFDyivqz/2KovxDFKxg8t24T9kYf1mnqjYlJqA/tNwHgUBGRitqmdbxAoEDHZX7Stw8O7/I0NHuAL7V3vRInjxU+dKsK3VabR2jiIXqlFkOnpu5mjeZkPotG0oa9Qy6n02FGD152xOjFMaMfFPcu00b+AwWM4OrmGh6xgs5zvhD7eyD2D8fEvtFmKYVABSO4VtavVjKVlGVKNIUM9xH7hd3fAbuXpxJxrCJxUjFo2ttL/xdi/++JrRNWoMs0Df9KbQPyNJubswkv5YTGi5NdW/nriR3OBc0mTvke+iEh1fIiUjYcFXYmZM6VrJmZha4nLGJJ8+VN20f//eNt6D/IT971U7PvWru6wWLHRTvW6d/0k5L+XT8u6G/a8RLbr9m/RTY3sOayFEcOKx1MakC9Cl1TP22l6kU70NjIz8V4Og69OgFccDVQv5v0HoTOIce7PpA+czocjQk30jLnMtyXvQlzk0j4HeOlZAmjPSxh82G71yL5kIQukBbvdktu8YPJ65pe/+TRVNEX2stgmP8Kaem7YPMVz+3hDXJo1tm7ptifw/948HsSi/bypKrAdu7piSXsEavh/Lp+qBOWIRfkM3e75udmlDC6JSH99qOMVyftjqs0xdL96tqHQWje/Pj+lqKkmRwXITE0rkn/g6q6jFP9+S6+27Gcq7Xna1obZZL/8v2QPAjBYNVJMHa7uOJWP6Kq6w4bR88ETF3/C4xfrWY= +sidebar_class_name: "post api-method" +info_path: gen/api/agent-management-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Create a new scheduled entry on the target node. + + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule-cron.RequestSchema.json b/docs/docs/gen/api/put-node-schedule-cron.RequestSchema.json deleted file mode 100644 index 7c0e72e79..000000000 --- a/docs/docs/gen/api/put-node-schedule-cron.RequestSchema.json +++ /dev/null @@ -1 +0,0 @@ -{"title":"Body","body":{"description":"Cron entry update parameters.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"New object to deploy (redeploy with updated content).\n","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1"}},"schedule":{"type":"string","description":"Cron schedule expression (e.g., \"*/5 * * * *\").\n","x-oapi-codegen-extra-tags":{"validate":"omitempty,cron_schedule"}},"user":{"type":"string","description":"User to run the command as."},"content_type":{"type":"string","description":"Content type: \"raw\" or \"template\".\n","enum":["raw","template"],"x-oapi-codegen-extra-tags":{"validate":"omitempty,oneof=raw template"}},"vars":{"type":"object","additionalProperties":true,"description":"Template variables.\n"}},"title":"CronUpdateRequest"}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule-cron.StatusCodes.json b/docs/docs/gen/api/put-node-schedule-cron.StatusCodes.json deleted file mode 100644 index 168807e89..000000000 --- a/docs/docs/gen/api/put-node-schedule-cron.StatusCodes.json +++ /dev/null @@ -1 +0,0 @@ -{"responses":{"200":{"description":"Cron entry updated.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Cron entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"CronMutationResult"}}},"required":["results"],"title":"CronUpdateResponse"}}}},"400":{"description":"Invalid request payload.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Cron entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error updating cron entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule-cron.api.mdx b/docs/docs/gen/api/put-node-schedule-cron.api.mdx deleted file mode 100644 index ca8628689..000000000 --- a/docs/docs/gen/api/put-node-schedule-cron.api.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: put-node-schedule-cron -title: "Update a cron entry" -description: "Update an existing cron drop-in entry on the target node." -sidebar_label: "Update a cron entry" -hide_title: true -hide_table_of_contents: true -api: eJztWG1vIzUQ/iuWxYcebF4K6QGR+FBeThRxqDpaIdGGaLKeZH3dtRd73HaJ9r+jsXeTtAlc7wCJk06VquyuPZ55nnnG9qylQp87XZO2Rk7lZa2AUIAReK89abMSubNGKGfrgTYCDblGWCOoQEHgVkjCWIXDayMzSbDycnolf84LVKHE+UswsMIKDc1Pz8/mbGpua3TAy3k5y+Tm6UzJqTwP9JNV2M//xlk26zEPTlMjp1dr+TWCQ3caqOCV2OL0zmlCOWtnmazBQYWEzsfBBiqUU1lYT/FnJjVHWQMVMpMOfw/aoZJTcgGzR1BcpOhghYZEbyETDj26W1TC2RDxuYUyoDiag2kyMYeyfJYJ60QJCyyFxxJzsk4c3WAzjUOfJazuBxZqPcitwhWaAd6Tg0ECcC1vodRMhJxunMwqbb46zuKXeUJetpn0eYEV8Bxqah7vyWmzkpmstPkRzYpxOm7bbAPGWwPBLHTE89yheBk8idwaAm2ENWUjoKwLMKFCp3ORF+AgZw4yEYxC53Pr0GcCjBJFUxdo/D/B4Olhcz4QoeMofruCwR+ng1/Hgy/ng9knH8mW84Uto6evrWrY2F8GHpIutuk1PAAbQ4KG2BDUdanzmNij156trfd9tovXmJPMZO1YBqQxBt69PhDbQ/d+wjuRxgqyQmFd2kYcOex+3WkqOr+V6Fx7y9yzlSasamp64DvkWZtv9i/C1w8XeF879F5bI45wuBpm4lp+PDoRH6e/a/nOvsWqsnGLfQwe3Zv9u/ToGDkXUjnLbVVxioIfcop1kM2TkTcGm0YLHjUV19LB3bXkOnAt2c0SCK9lihBNqLh2Objjmtl95WL49rFbg3b5lYM7sbHDANyC84cSDZTS7DCU5zspd7D6debELTgNixKjZNk2aWL2I71pu3iVRCTblr879LU1PuXyp+PxE3SlWE3/knpe28Vcq0OELa2rgORUhqDVHoEXBYrXdiHOvhXBo+LEqJ3N0XtBhfaiqxTsKd5DVUcMTk7G+MVkPB7gp18uBpNjNRnA58fPB5PJ8+cnJ5PJeDwey4RJKGmXEnAOGi7DhNVBqh569yoaEHYpIG3IuUMgzDoA446jsERCsdlRxdI6YQ3GzWu4B9RmU3xjbn/fjeTlWShpS6QCqIeI8WKQNmtHBXkCCv6Q/V4C9oZ5AV0iE+JvdF3HX6QrtIFYE/ssJbO9Mw/DjV6keNtMPi28x/tbFH8BZoW7abSwtkQwe7N/KZAKLiQPfKms0kuNSvjGE1bR52QZnbNPKE7f8TBRofewQqF3gU94DWUSW78FXe2ecjrkZw/V+jJQ9C4lk2wfG+izdHZY5EnWnconh4R9ZmKR6rUiamhKC/+mup+I3qnYee4zJc5NaWvzPDiX6s5WzS8isHFLQHIab/tci8QpJNDlwXR+tPimyIpujoCFDbR14uCyKiAvbZDurLsRnQS6rUjt5rE2hCt0B0tYCpInPFjkZDzerd0xu/YYPd5n9NJAoMI6/QcqMRCn52fiBhuxyZoPxL4PxH62T+wL6xZaKTRiIM6MD8ulzjVXlxpdpeM5zX9g971gd/K3JyxjSSxtMB+q8HtB58mhfTUdBuJRb9ORiex+4PT/z2mbyQqpsNzfqkMEnrsuUzmCWo+4eTZa90e3dtTfY0dM8mgdX8YWmLtNTa3Zth/GbbIqsbfbFdtEUxDVsuuVxCNsHCSz7seL/j70wy8X8TDJKfNq2xD5rg9x25LYErNtA2zfpWv39vnhDbq773ZXU15Pm6WN7nbYncbj7bZnyMcNnoHOJxqOh+NhvE/V1lMFMb+7rlbfuNwRx2MW11up/NM+ZwqI8J5GdQnasE/BlbxGIvdKQq1lJnmOzOR092zeI5fF7iV/jV9mWTzB89z1egEeL13Ztvz694CuSdT3t/HY3VTa828lp0so/eMr/G64R6+6A9sz8R+3NQ9C0995TRMToAz8JDN5g81ud5ablO8U03/XoXyHcFIoszaTBYJiRVytu09dk2hwwQa2U/fKNgORZpzmOdb0t2NnO/Xl/PKC5d11M6tY3Drd8f/opa1T8326Tu/WsgSzCrDisckkixMe1pJHtSMGdRCH9TqNuLA3aNp2AwvxM+PStn8C3RJ+qA== -sidebar_class_name: "put api-method" -info_path: gen/api/agent-management-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; -import Translate from "@docusaurus/Translate"; - - - - - - - - - - -Update an existing cron drop-in entry on the target node. - - - - Request - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule-cron.ParamsDetails.json b/docs/docs/gen/api/put-node-schedule.ParamsDetails.json similarity index 56% rename from docs/docs/gen/api/put-node-schedule-cron.ParamsDetails.json rename to docs/docs/gen/api/put-node-schedule.ParamsDetails.json index 748479206..1bf06c373 100644 --- a/docs/docs/gen/api/put-node-schedule-cron.ParamsDetails.json +++ b/docs/docs/gen/api/put-node-schedule.ParamsDetails.json @@ -1 +1 @@ -{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Cron entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file +{"parameters":[{"name":"hostname","in":"path","required":true,"description":"Target agent hostname, reserved routing value (_any, _all), or label selector (key:value).\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"},"schema":{"type":"string","minLength":1}},{"name":"name","in":"path","required":true,"description":"Scheduled entry name. Must contain only alphanumeric characters, underscores, and hyphens.\n","x-oapi-codegen-extra-tags":{"validate":"required,min=1"},"schema":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_-]+$"}}]} \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule.RequestSchema.json b/docs/docs/gen/api/put-node-schedule.RequestSchema.json new file mode 100644 index 000000000..ac464053c --- /dev/null +++ b/docs/docs/gen/api/put-node-schedule.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"description":"Scheduled entry update parameters.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"New object to deploy (redeploy with updated content).\n","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1"}},"schedule":{"type":"string","description":"Cron schedule expression (e.g., \"*/5 * * * *\").\n","x-oapi-codegen-extra-tags":{"validate":"omitempty,cron_schedule"}},"user":{"type":"string","description":"User to run the command as."},"content_type":{"type":"string","description":"Content type: \"raw\" or \"template\".\n","enum":["raw","template"],"x-oapi-codegen-extra-tags":{"validate":"omitempty,oneof=raw template"}},"vars":{"type":"object","additionalProperties":true,"description":"Template variables.\n"}},"title":"ScheduleUpdateRequest"}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule.StatusCodes.json b/docs/docs/gen/api/put-node-schedule.StatusCodes.json new file mode 100644 index 000000000..359aa26cd --- /dev/null +++ b/docs/docs/gen/api/put-node-schedule.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Scheduled entry updated.","content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"The job ID used to process this request.","example":"550e8400-e29b-41d4-a716-446655440000"},"results":{"type":"array","items":{"type":"object","description":"Result of a cron create, update, or delete operation for one host.","properties":{"hostname":{"type":"string","description":"Hostname of the agent that processed this operation."},"status":{"type":"string","enum":["ok","failed","skipped","timeout"],"description":"The status of the operation for this host."},"name":{"type":"string","description":"Scheduled entry name."},"changed":{"type":"boolean","description":"Whether the operation modified system state."},"error":{"type":"string","description":"Error message if the agent failed."}},"required":["hostname","status"],"title":"ScheduleMutationResult"}}},"required":["results"],"title":"ScheduleUpdateResponse"}}}},"400":{"description":"Invalid request payload.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"404":{"description":"Scheduled entry not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}},"500":{"description":"Error updating scheduled entry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"A description of the error that occurred.","example":"Failed to retrieve status."},"details":{"type":"string","description":"Additional details about the error.","example":"Failed due to network timeout."},"code":{"type":"integer","description":"The error code.","example":500}},"title":"ErrorResponse"}}}}}} \ No newline at end of file diff --git a/docs/docs/gen/api/put-node-schedule.api.mdx b/docs/docs/gen/api/put-node-schedule.api.mdx new file mode 100644 index 000000000..f6f5210a5 --- /dev/null +++ b/docs/docs/gen/api/put-node-schedule.api.mdx @@ -0,0 +1,70 @@ +--- +id: put-node-schedule +title: "Update a scheduled entry" +description: "Update an existing scheduled entry on the target node." +sidebar_label: "Update a scheduled entry" +hide_title: true +hide_table_of_contents: true +api: eJztWGFv4zYS/SsEcR+yPdlxWmfvaqAf0rsumsNtEWwTFLjENcbi2OJGIlVymEQ19N8PQ0q2EwtNdtsCXWARIJBkcjjz3rwhORup0OdO16StkTN5VSsgFGAEPmhP2qyFzwtUoUQl0JBrhDWCChQEbo0kjFU4vjEykwRrL2fX8sdu/OItGFhjhYYWZxfni97OwtbogNfzcp7J7du5kjN5EegHq7C3ITPpMQ9OUyNn1xv5LYJDdxao4JV6i7N7pwnlvJ1nsgYHFRI6HycYqFDOZGE9xcdMag6zBipkJh3+ErRDJWfkAmZPsLhMEcIaDYneQiYcenR3qISzIQJ0B2VAcbQA02RiAWX5KhPWiRKWWAqPJeZknTi6xWYWh75KeD2MLNR6lFuFazQjfCAHowTiRt5BqZkJOds6mVXafHOSxV8WCX3ZZhGECngONTWP9+S0WctMVtr8F82asTpp22wLxgcD8eOTDGADY/E2eBK5NQTaCGvKRkBZF2BChU7nIi/AQc5EZCIYhc7n1qHPBBgliqYu0PjfA8TLY+ekIELHofx8DaNfz0b/m4y+Xozmf/+bbDlp2DJ6+taqho39dvQhSWSXaOMBABkXNMTWoK5LnccUP37v2eTm0HG7fI85yUzWjgVBGmP03eeBAB/7+APeizRWkBUK69I24shh93Svqej8VqJz7QOz0FaasKqp6dHv4I8qfda/fzlrtoVE4EPt0HttjTjC8XqciRv5xfGp+CL93ciP9i131mwLTfQxeHTP+3fl0TFyLqTiltuq4jwFP+Y86yBbJCPPBptGCx41EzfSwf2N5IpwI9nNEghvZIoQTai4kjm45wra/cpl8cNjtwbt6hsH92JrhwG4A+eHEg2U0uwwlBd7KTdYBztz4g6chmWJUbdsmzQx+1uJpN3jXVKTbFse49DX1viUz19OJi8VmGJZ/UEyem+XC62GmFtZVwHJmQxBqwMmLwsU7+1SnP9bBI+KM6R2NkfvBRXai65usKf4AFUdwTg9neA/p5PJCL/8ejmanqjpCP5x8no0nb5+fXo6nU4mk4lMwISS9rkB56DhykxYDXL22Lt30YCwKwGCE1/kDoEw6wCMm5DCEgnFdpMVK+uENRj3s/EBUNt98tkk/74bycuzYtIuSQVQDxHjxSBt145S8gQU/JD9Xgv2lnkBXSIT4m91Xccn0hXaQCyOQ5aS2d6Zx+FGL1K8bSZfFt7glhdLQQFmjfu5tLS2RDAHJn4qkAouK48cqqzSK41K+MYTVtHxZBmdsy8oVd/xMFGh97BGoffRT6CNZZJdvyFd759+Ovjnh9p9Gyh6mLJKtk+N9Ok6MLWXfRJ6p/vpkNTPTSxdvXBEDU1p4Y+U+gtRPBN7733axLkph22eB+dSEdpJ+00EOG4USE7jXZ94kUCFBLoczO0ni29Lr+jmCFjaQDsnBpdVAXlpg3Rv3a3o9NBtUGo/qbUhXKMbrGcpSJ7waJHTyWS/oscsO2D05JDRKwOBCuv0r6jESJxdnItbbMQ2cz4T+ykQ+9UhsW+sW2ql0IiRODc+rFY611xlanSVjqc3/5ndT4Ld6fNnLmNJrGwwn0vxJ8Hp6dDmmk4G8fA30Lf5TOxfn9g2kxVSYbkTVocIPPdnZvIYan3MrbbjTX+Ya497go838T32ytxd6nzNd40zlnqViNtvn20DKYhq2fVS4nk2DpJZ9/CmvyH956fLeLLkbHm3a5h810e361bsONl1CHbf0o189/74ct1dhbtbK6+nzcpGdzvYzuJZd9dc5DMHz0DnEwMn48k43rBq66mCmNpd66tvbz4Vx1MWNzup/K6WaAqJ8IGO6xK0Ya+CK3mBxOy1hFrLTPIcmcnZ/lF91wOdxU/zLJ7kedJmswSPV65sW/78S0DXJNb7O3rsfirt+VnJ2QpK//Rivx/k0bvuwPZK/Mltz0FM+guwaSL3ZeA3mclbbPa7t9zE/KiY/uQO5kfElOKZt5ksEBQr4nrT/dT1j0aXbGA39aBiMxppxlmeY02/OXa+V1ouri5Z3l23s4p1rdMd/49e2jp16Geb9G0jSzDrAGsem0yyOOFxLXlSO2JQgzhsNmnEpb1F07ZbWIjfGZe2/T9gzo9e +sidebar_class_name: "put api-method" +info_path: gen/api/agent-management-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Update an existing scheduled entry on the target node. + + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gen/api/schedule-management-api-cron-operations.tag.mdx b/docs/docs/gen/api/schedule-management-api-schedule-operations.tag.mdx similarity index 60% rename from docs/docs/gen/api/schedule-management-api-cron-operations.tag.mdx rename to docs/docs/gen/api/schedule-management-api-schedule-operations.tag.mdx index e38b90d6d..1d1a53c19 100644 --- a/docs/docs/gen/api/schedule-management-api-cron-operations.tag.mdx +++ b/docs/docs/gen/api/schedule-management-api-schedule-operations.tag.mdx @@ -1,13 +1,13 @@ --- -id: schedule-management-api-cron-operations -title: "Node/Schedule/Cron" -description: "Node/Schedule/Cron" +id: schedule-management-api-schedule-operations +title: "Node/Schedule" +description: "Node/Schedule" custom_edit_url: null --- -Cron drop-in file management on a target node. +Scheduled task management on a target node. diff --git a/docs/docs/gen/api/sidebar.ts b/docs/docs/gen/api/sidebar.ts index 67aad07c5..6e46eeb99 100644 --- a/docs/docs/gen/api/sidebar.ts +++ b/docs/docs/gen/api/sidebar.ts @@ -750,40 +750,40 @@ const sidebar: SidebarsConfig = { }, { type: "category", - label: "Node/Schedule/Cron", + label: "Node/Schedule", link: { type: "doc", - id: "gen/api/schedule-management-api-cron-operations", + id: "gen/api/schedule-management-api-schedule-operations", }, items: [ { type: "doc", - id: "gen/api/get-node-schedule-cron", - label: "List all cron entries", + id: "gen/api/get-node-schedule", + label: "List all scheduled entries", className: "api-method get", }, { type: "doc", - id: "gen/api/post-node-schedule-cron", - label: "Create a cron entry", + id: "gen/api/post-node-schedule", + label: "Create a scheduled entry", className: "api-method post", }, { type: "doc", - id: "gen/api/get-node-schedule-cron-by-name", - label: "Get a cron entry", + id: "gen/api/get-node-schedule-by-name", + label: "Get a scheduled entry", className: "api-method get", }, { type: "doc", - id: "gen/api/put-node-schedule-cron", - label: "Update a cron entry", + id: "gen/api/put-node-schedule", + label: "Update a scheduled entry", className: "api-method put", }, { type: "doc", - id: "gen/api/delete-node-schedule-cron", - label: "Delete a cron entry", + id: "gen/api/delete-node-schedule", + label: "Delete a scheduled entry", className: "api-method delete", }, ], diff --git a/examples/sdk/client/cron.go b/examples/sdk/client/schedule.go similarity index 94% rename from examples/sdk/client/cron.go rename to examples/sdk/client/schedule.go index 3b8b91373..2c25541e7 100644 --- a/examples/sdk/client/cron.go +++ b/examples/sdk/client/schedule.go @@ -78,9 +78,9 @@ func main() { fmt.Println("Uploaded: logrotate-script") // Create a cron entry referencing the uploaded object. - // Returns Collection[CronMutationResult] with per-host results. + // Returns Collection[ScheduleMutationResult] with per-host results. fmt.Println("\n=== Creating cron entry ===") - createResp, err := c.Cron.Create(ctx, target, client.CronCreateOpts{ + createResp, err := c.Cron.Create(ctx, target, client.ScheduleCreateOpts{ Name: "backup-daily", Schedule: "0 2 * * *", Object: "backup-script", @@ -95,7 +95,7 @@ func main() { // Create a periodic entry (interval-based) referencing an uploaded object. fmt.Println("\n=== Creating periodic cron entry ===") - periodicResp, err := c.Cron.Create(ctx, target, client.CronCreateOpts{ + periodicResp, err := c.Cron.Create(ctx, target, client.ScheduleCreateOpts{ Name: "logrotate", Interval: "daily", Object: "logrotate-script", @@ -108,7 +108,7 @@ func main() { } // List all cron entries. - // Returns Collection[CronEntryResult] with per-host entries. + // Returns Collection[ScheduleEntryResult] with per-host entries. fmt.Println("\n=== Listing cron entries ===") listResp, err := c.Cron.List(ctx, target) if err != nil { @@ -124,7 +124,7 @@ func main() { } // Get a specific entry. - // Returns Collection[CronEntryResult] — one result per host. + // Returns Collection[ScheduleEntryResult] — one result per host. fmt.Println("\n=== Getting cron entry ===") getResp, err := c.Cron.Get(ctx, target, "backup-daily") if err != nil { @@ -149,7 +149,7 @@ func main() { fmt.Println("Uploaded: backup-script-v2") fmt.Println("\n=== Updating cron entry ===") - updateResp, err := c.Cron.Update(ctx, target, "backup-daily", client.CronUpdateOpts{ + updateResp, err := c.Cron.Update(ctx, target, "backup-daily", client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", Object: "backup-script-v2", }) diff --git a/internal/agent/agent.go b/internal/agent/agent.go index 18aa96f2c..5af7c4993 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -39,7 +39,7 @@ import ( "github.com/osapi-io/osapi/internal/provider/node/disk" nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/telemetry/process" ) @@ -52,7 +52,7 @@ func New( streamName string, hostProvider nodeHost.Provider, diskProvider disk.Provider, - memProvider mem.Provider, + memoryProvider memory.Provider, loadProvider load.Provider, netinfoProvider netinfo.Provider, processProvider process.Provider, @@ -70,7 +70,7 @@ func New( streamName: streamName, hostProvider: hostProvider, diskProvider: diskProvider, - memProvider: memProvider, + memoryProvider: memoryProvider, loadProvider: loadProvider, netinfoProvider: netinfoProvider, processProvider: processProvider, diff --git a/internal/agent/agent_public_test.go b/internal/agent/agent_public_test.go index 4b7bc0d5f..c41ce980b 100644 --- a/internal/agent/agent_public_test.go +++ b/internal/agent/agent_public_test.go @@ -50,7 +50,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" "github.com/osapi-io/osapi/internal/telemetry/metrics" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -132,7 +132,7 @@ func (s *AgentPublicTestSuite) buildAgent() *agent.Agent { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -239,7 +239,7 @@ func (s *AgentPublicTestSuite) TestStart() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -285,7 +285,7 @@ func (s *AgentPublicTestSuite) TestStart() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -327,7 +327,7 @@ func (s *AgentPublicTestSuite) TestStart() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -389,7 +389,7 @@ func (s *AgentPublicTestSuite) TestStart() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), diff --git a/internal/agent/condition.go b/internal/agent/condition.go index 4fe6361a6..8a34b0da9 100644 --- a/internal/agent/condition.go +++ b/internal/agent/condition.go @@ -27,7 +27,7 @@ import ( "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) // findPrevCondition returns the previous condition of the given type, @@ -60,7 +60,7 @@ func transitionTime( } func evaluateMemoryPressure( - stats *mem.Result, + stats *memory.Result, threshold int, prev []job.Condition, ) job.Condition { diff --git a/internal/agent/condition_public_test.go b/internal/agent/condition_public_test.go index f930b13bc..c2288b56a 100644 --- a/internal/agent/condition_public_test.go +++ b/internal/agent/condition_public_test.go @@ -30,7 +30,7 @@ import ( "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type ConditionPublicTestSuite struct { @@ -191,14 +191,14 @@ func (s *ConditionPublicTestSuite) TestTransitionTime() { func (s *ConditionPublicTestSuite) TestEvaluateMemoryPressure() { tests := []struct { name string - stats *mem.Result + stats *memory.Result threshold int prev []job.Condition validateFunc func(job.Condition) }{ { name: "when usage above threshold returns true with reason", - stats: &mem.Result{ + stats: &memory.Result{ Total: 8 * 1024 * 1024 * 1024, // 8 GB Available: 1 * 1024 * 1024 * 1024, // 1 GB available = 87.5% used }, @@ -214,7 +214,7 @@ func (s *ConditionPublicTestSuite) TestEvaluateMemoryPressure() { }, { name: "when usage below threshold returns false", - stats: &mem.Result{ + stats: &memory.Result{ Total: 8 * 1024 * 1024 * 1024, // 8 GB Available: 6 * 1024 * 1024 * 1024, // 6 GB available = 25% used }, @@ -239,7 +239,7 @@ func (s *ConditionPublicTestSuite) TestEvaluateMemoryPressure() { }, { name: "when total is zero returns false", - stats: &mem.Result{ + stats: &memory.Result{ Total: 0, Available: 0, }, @@ -253,7 +253,7 @@ func (s *ConditionPublicTestSuite) TestEvaluateMemoryPressure() { }, { name: "when usage exactly at threshold returns false", - stats: &mem.Result{ + stats: &memory.Result{ Total: 100, Available: 20, // 80% used, threshold is 80 (> not >=) }, @@ -511,7 +511,7 @@ func (s *ConditionPublicTestSuite) TestLastTransitionTimeTracking() { name: "when status flips from false to true transition time updates", evalFunc: func(prev []job.Condition) job.Condition { return agent.ExportEvaluateMemoryPressure( - &mem.Result{ + &memory.Result{ Total: 100, Available: 10, // 90% used }, @@ -536,7 +536,7 @@ func (s *ConditionPublicTestSuite) TestLastTransitionTimeTracking() { name: "when status stays true transition time is preserved", evalFunc: func(prev []job.Condition) job.Condition { return agent.ExportEvaluateMemoryPressure( - &mem.Result{ + &memory.Result{ Total: 100, Available: 10, // 90% used }, @@ -560,7 +560,7 @@ func (s *ConditionPublicTestSuite) TestLastTransitionTimeTracking() { name: "when status flips from true to false transition time updates", evalFunc: func(prev []job.Condition) job.Condition { return agent.ExportEvaluateMemoryPressure( - &mem.Result{ + &memory.Result{ Total: 100, Available: 80, // 20% used }, @@ -585,7 +585,7 @@ func (s *ConditionPublicTestSuite) TestLastTransitionTimeTracking() { name: "when status stays false transition time is preserved", evalFunc: func(prev []job.Condition) job.Condition { return agent.ExportEvaluateMemoryPressure( - &mem.Result{ + &memory.Result{ Total: 100, Available: 80, // 20% used }, diff --git a/internal/agent/consumer_public_test.go b/internal/agent/consumer_public_test.go index 13a966d93..fd11dccce 100644 --- a/internal/agent/consumer_public_test.go +++ b/internal/agent/consumer_public_test.go @@ -41,7 +41,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -83,7 +83,7 @@ func (s *ConsumerPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), diff --git a/internal/agent/drain_public_test.go b/internal/agent/drain_public_test.go index 805193a51..9d0950ebf 100644 --- a/internal/agent/drain_public_test.go +++ b/internal/agent/drain_public_test.go @@ -38,7 +38,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -70,7 +70,7 @@ func (s *DrainPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), diff --git a/internal/agent/export_test.go b/internal/agent/export_test.go index 3eb1588b2..d92d9918b 100644 --- a/internal/agent/export_test.go +++ b/internal/agent/export_test.go @@ -44,7 +44,7 @@ import ( diskProv "github.com/osapi-io/osapi/internal/provider/node/disk" nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - memProv "github.com/osapi-io/osapi/internal/provider/node/mem" + memProv "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/provider/node/ntp" "github.com/osapi-io/osapi/internal/provider/node/power" "github.com/osapi-io/osapi/internal/provider/node/sysctl" @@ -470,7 +470,7 @@ func SetAgentAppConfig( a.registry.processors["node"] = NewNodeProcessor( a.hostProvider, a.diskProvider, - a.memProvider, + a.memoryProvider, a.loadProvider, sysctl.Provider(nil), ntp.Provider(nil), @@ -508,7 +508,7 @@ func SetAgentHostProvider( a.registry.processors["node"] = NewNodeProcessor( p, a.diskProvider, - a.memProvider, + a.memoryProvider, a.loadProvider, sysctl.Provider(nil), ntp.Provider(nil), @@ -559,7 +559,7 @@ func ExportGetDiskProvider( func ExportGetMemProvider( a *Agent, ) memProv.Provider { - return a.memProvider + return a.memoryProvider } // ExportGetLoadProvider returns the load provider from the registry for testing. diff --git a/internal/agent/facts_public_test.go b/internal/agent/facts_public_test.go index 67beb3bac..29e68ac2f 100644 --- a/internal/agent/facts_public_test.go +++ b/internal/agent/facts_public_test.go @@ -42,7 +42,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -76,7 +76,7 @@ func (s *FactsPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: s.mockHostProvider, diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), diff --git a/internal/agent/handler_public_test.go b/internal/agent/handler_public_test.go index 848f9d0d9..5d952fa4a 100644 --- a/internal/agent/handler_public_test.go +++ b/internal/agent/handler_public_test.go @@ -56,7 +56,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" "github.com/osapi-io/osapi/internal/telemetry/metrics" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -128,7 +128,7 @@ func (s *HandlerPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMock, pingProvider: pingMock, diff --git a/internal/agent/heartbeat.go b/internal/agent/heartbeat.go index 9053e5f79..874f4090c 100644 --- a/internal/agent/heartbeat.go +++ b/internal/agent/heartbeat.go @@ -29,7 +29,7 @@ import ( "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/telemetry/process" ) @@ -145,8 +145,8 @@ func (a *Agent) writeRegistration( reg.LoadAverages = avg } - var memStats *mem.Result - if stats, err := a.memProvider.GetStats(); err == nil { + var memStats *memory.Result + if stats, err := a.memoryProvider.GetStats(); err == nil { memStats = stats reg.MemoryStats = stats } diff --git a/internal/agent/heartbeat_public_test.go b/internal/agent/heartbeat_public_test.go index c81d14c15..b5ea320d4 100644 --- a/internal/agent/heartbeat_public_test.go +++ b/internal/agent/heartbeat_public_test.go @@ -48,7 +48,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -156,7 +156,7 @@ func (s *HeartbeatPublicTestSuite) TestStartWithHeartbeat() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -195,7 +195,7 @@ func (s *HeartbeatPublicTestSuite) TestStartWithHeartbeat() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -255,7 +255,7 @@ func (s *HeartbeatLowLevelPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), @@ -559,7 +559,7 @@ func (s *HeartbeatLowLevelPublicTestSuite) TestStartHeartbeatHostnameChange() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(ctrl), diskProvider: diskMocks.NewDefaultMockProvider(ctrl), - memProvider: memMocks.NewDefaultMockProvider(ctrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(ctrl), loadProvider: loadMocks.NewDefaultMockProvider(ctrl), dnsProvider: dnsMocks.NewDefaultMockProvider(ctrl), pingProvider: pingMocks.NewDefaultMockProvider(ctrl), diff --git a/internal/agent/lifecycle_public_test.go b/internal/agent/lifecycle_public_test.go index f326ad0ed..63d14147a 100644 --- a/internal/agent/lifecycle_public_test.go +++ b/internal/agent/lifecycle_public_test.go @@ -39,7 +39,7 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -67,7 +67,7 @@ func (s *LifecyclePublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewDefaultMockProvider(s.mockCtrl), pingProvider: pingMocks.NewDefaultMockProvider(s.mockCtrl), diff --git a/internal/agent/node_status_public_test.go b/internal/agent/node_status_public_test.go index 20b541c9c..d266ef9c8 100644 --- a/internal/agent/node_status_public_test.go +++ b/internal/agent/node_status_public_test.go @@ -41,7 +41,7 @@ import ( hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" logMocks "github.com/osapi-io/osapi/internal/provider/node/log/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" ntpMocks "github.com/osapi-io/osapi/internal/provider/node/ntp/mocks" powerMocks "github.com/osapi-io/osapi/internal/provider/node/power/mocks" processMocks "github.com/osapi-io/osapi/internal/provider/node/process/mocks" @@ -68,11 +68,11 @@ func (s *NodeStatusPublicTestSuite) SetupTest() { // processorWith builds a node processor whose host, disk, memory and load reads // behave as the test describes. func (s *NodeStatusPublicTestSuite) processorWith( - setup func(*hostMocks.MockProvider, *diskMocks.MockProvider, *memMocks.MockProvider, *loadMocks.MockProvider), + setup func(*hostMocks.MockProvider, *diskMocks.MockProvider, *memoryMocks.MockProvider, *loadMocks.MockProvider), ) agent.ProcessorFunc { hostMock := hostMocks.NewMockProvider(s.mockCtrl) diskMock := diskMocks.NewMockProvider(s.mockCtrl) - memMock := memMocks.NewMockProvider(s.mockCtrl) + memMock := memoryMocks.NewMockProvider(s.mockCtrl) loadMock := loadMocks.NewMockProvider(s.mockCtrl) setup(hostMock, diskMock, memMock, loadMock) @@ -106,7 +106,7 @@ func (s *NodeStatusPublicTestSuite) TestGetNodeStatus() { tests := []struct { name string - setup func(*hostMocks.MockProvider, *diskMocks.MockProvider, *memMocks.MockProvider, *loadMocks.MockProvider) + setup func(*hostMocks.MockProvider, *diskMocks.MockProvider, *memoryMocks.MockProvider, *loadMocks.MockProvider) validateFunc func(map[string]any, error) }{ { @@ -114,7 +114,7 @@ func (s *NodeStatusPublicTestSuite) TestGetNodeStatus() { setup: func( h *hostMocks.MockProvider, d *diskMocks.MockProvider, - m *memMocks.MockProvider, + m *memoryMocks.MockProvider, l *loadMocks.MockProvider, ) { h.EXPECT().GetHostname().Return("web-01", nil) @@ -135,7 +135,7 @@ func (s *NodeStatusPublicTestSuite) TestGetNodeStatus() { setup: func( h *hostMocks.MockProvider, d *diskMocks.MockProvider, - m *memMocks.MockProvider, + m *memoryMocks.MockProvider, l *loadMocks.MockProvider, ) { h.EXPECT().GetHostname().Return("web-01", nil) @@ -165,7 +165,7 @@ func (s *NodeStatusPublicTestSuite) TestGetNodeStatus() { setup: func( h *hostMocks.MockProvider, d *diskMocks.MockProvider, - m *memMocks.MockProvider, + m *memoryMocks.MockProvider, l *loadMocks.MockProvider, ) { h.EXPECT().GetHostname().Return("", errors.New("no hostname")) diff --git a/internal/agent/processor.go b/internal/agent/processor.go index 4273fe07b..84c2eb363 100644 --- a/internal/agent/processor.go +++ b/internal/agent/processor.go @@ -34,7 +34,7 @@ import ( nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" logProv "github.com/osapi-io/osapi/internal/provider/node/log" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/provider/node/ntp" "github.com/osapi-io/osapi/internal/provider/node/power" processProv "github.com/osapi-io/osapi/internal/provider/node/process" @@ -62,7 +62,7 @@ func (a *Agent) processJobOperation( func NewNodeProcessor( hostProvider nodeHost.Provider, diskProvider disk.Provider, - memProvider mem.Provider, + memoryProvider memory.Provider, loadProvider load.Provider, sysctlProvider sysctl.Provider, ntpProvider ntp.Provider, @@ -87,7 +87,7 @@ func NewNodeProcessor( } return getNodeHostname(hostProvider, appConfig, logger) case "status": - return getNodeStatus(hostProvider, diskProvider, memProvider, loadProvider, logger) + return getNodeStatus(hostProvider, diskProvider, memoryProvider, loadProvider, logger) case "uptime": return getNodeUptime(hostProvider, logger) case "os", "osinfo": @@ -95,7 +95,7 @@ func NewNodeProcessor( case "disk": return getNodeDisk(diskProvider, logger) case "memory", "mem": - return getNodeMemory(memProvider, logger) + return getNodeMemory(memoryProvider, logger) case "load": return getNodeLoad(loadProvider, logger) case "sysctl": @@ -184,7 +184,7 @@ func setNodeHostname( func getNodeStatus( hostProvider nodeHost.Provider, diskProvider disk.Provider, - memProvider mem.Provider, + memoryProvider memory.Provider, loadProvider load.Provider, logger *slog.Logger, ) (json.RawMessage, error) { @@ -219,7 +219,7 @@ func getNodeStatus( diskUsage, err := diskProvider.GetLocalUsageStats() record("disk_usage", err) - memInfo, err := memProvider.GetStats() + memInfo, err := memoryProvider.GetStats() record("memory_stats", err) loadAvg, err := loadProvider.GetAverageStats() @@ -300,12 +300,12 @@ func getNodeDisk( // getNodeMemory retrieves memory statistics. func getNodeMemory( - memProvider mem.Provider, + memoryProvider memory.Provider, logger *slog.Logger, ) (json.RawMessage, error) { - logger.Debug("executing mem.GetStats") + logger.Debug("executing memory.GetStats") - memInfo, err := memProvider.GetStats() + memInfo, err := memoryProvider.GetStats() if err != nil { return nil, err } diff --git a/internal/agent/processor_docker.go b/internal/agent/processor_container.go similarity index 100% rename from internal/agent/processor_docker.go rename to internal/agent/processor_container.go diff --git a/internal/agent/processor_docker_public_test.go b/internal/agent/processor_container_public_test.go similarity index 100% rename from internal/agent/processor_docker_public_test.go rename to internal/agent/processor_container_public_test.go diff --git a/internal/agent/processor_public_test.go b/internal/agent/processor_public_test.go index 9d48fa3bf..548458b20 100644 --- a/internal/agent/processor_public_test.go +++ b/internal/agent/processor_public_test.go @@ -48,7 +48,7 @@ import ( nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" processMocks "github.com/osapi-io/osapi/internal/telemetry/process/mocks" ) @@ -87,7 +87,7 @@ func (s *ProcessorPublicTestSuite) SetupTest() { Return(nil, fmt.Errorf("host: %w", provider.ErrUnsupported)). AnyTimes() diskMock := diskMocks.NewDefaultMockProvider(s.mockCtrl) - memMock := memMocks.NewDefaultMockProvider(s.mockCtrl) + memMock := memoryMocks.NewDefaultMockProvider(s.mockCtrl) loadMock := loadMocks.NewDefaultMockProvider(s.mockCtrl) // Use plain DNS mock to avoid hardcoded interface expectations @@ -128,7 +128,7 @@ func (s *ProcessorPublicTestSuite) SetupTest() { streamName: "test-stream", hostProvider: hostMock, diskProvider: diskMock, - memProvider: memMock, + memoryProvider: memMock, loadProvider: loadMock, dnsProvider: dnsMock, pingProvider: pingMock, @@ -836,7 +836,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMock, diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -864,7 +864,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMock, diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -890,7 +890,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMock, diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -916,7 +916,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMock, - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -934,7 +934,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { name: "memory provider error", operation: "memory.get", createAgent: func() *agent.Agent { - memMock := memMocks.NewPlainMockProvider(s.mockCtrl) + memMock := memoryMocks.NewPlainMockProvider(s.mockCtrl) memMock.EXPECT().GetStats().Return(nil, errors.New("memory unavailable")) return newTestAgent(newTestAgentParams{ appFs: memfs.New(), @@ -942,7 +942,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMock, + memoryProvider: memMock, loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -968,7 +968,7 @@ func (s *ProcessorPublicTestSuite) TestSystemOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMock, dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -1024,7 +1024,7 @@ func (s *ProcessorPublicTestSuite) TestNetworkOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMock, pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -1054,7 +1054,7 @@ func (s *ProcessorPublicTestSuite) TestNetworkOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMock, pingProvider: pingMocks.NewPlainMockProvider(s.mockCtrl), @@ -1082,7 +1082,7 @@ func (s *ProcessorPublicTestSuite) TestNetworkOperationErrors() { jobClient: s.mockJobClient, hostProvider: hostMocks.NewPlainMockProvider(s.mockCtrl), diskProvider: diskMocks.NewPlainMockProvider(s.mockCtrl), - memProvider: memMocks.NewPlainMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewPlainMockProvider(s.mockCtrl), loadProvider: loadMocks.NewPlainMockProvider(s.mockCtrl), dnsProvider: dnsMocks.NewPlainMockProvider(s.mockCtrl), pingProvider: pingMock, diff --git a/internal/agent/processor_schedule.go b/internal/agent/processor_schedule.go index 6a403008b..0dd251bc1 100644 --- a/internal/agent/processor_schedule.go +++ b/internal/agent/processor_schedule.go @@ -28,7 +28,7 @@ import ( "strings" "github.com/osapi-io/osapi/internal/job" - "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + "github.com/osapi-io/osapi/internal/provider/schedule/cron" ) // NewScheduleProcessor returns a ProcessorFunc that handles schedule-related operations. @@ -62,7 +62,7 @@ func processCronOperation( // Extract sub-operation: "cron.list" -> "list" parts := strings.Split(jobRequest.Operation, ".") if len(parts) < 2 { - return nil, fmt.Errorf("invalid cron operation: %s", jobRequest.Operation) + return nil, fmt.Errorf("invalid schedule operation: %s", jobRequest.Operation) } subOp := parts[1] diff --git a/internal/agent/processor_schedule_public_test.go b/internal/agent/processor_schedule_public_test.go index 261914cc3..939e11a6a 100644 --- a/internal/agent/processor_schedule_public_test.go +++ b/internal/agent/processor_schedule_public_test.go @@ -36,9 +36,9 @@ import ( diskMocks "github.com/osapi-io/osapi/internal/provider/node/disk/mocks" hostMocks "github.com/osapi-io/osapi/internal/provider/node/host/mocks" loadMocks "github.com/osapi-io/osapi/internal/provider/node/load/mocks" - memMocks "github.com/osapi-io/osapi/internal/provider/node/mem/mocks" - "github.com/osapi-io/osapi/internal/provider/scheduled/cron" - cronMocks "github.com/osapi-io/osapi/internal/provider/scheduled/cron/mocks" + memoryMocks "github.com/osapi-io/osapi/internal/provider/node/memory/mocks" + "github.com/osapi-io/osapi/internal/provider/schedule/cron" + cronMocks "github.com/osapi-io/osapi/internal/provider/schedule/cron/mocks" ) type ProcessorSchedulePublicTestSuite struct { @@ -141,7 +141,7 @@ func (s *ProcessorSchedulePublicTestSuite) TestProcessCronOperation() { validateFunc func(json.RawMessage, error) }{ { - name: "invalid cron operation missing sub-operation", + name: "invalid schedule operation missing sub-operation", jobRequest: job.Request{ Type: job.TypeQuery, Category: "schedule", @@ -153,7 +153,7 @@ func (s *ProcessorSchedulePublicTestSuite) TestProcessCronOperation() { }, validateFunc: func(result json.RawMessage, err error) { s.Error(err) - s.Contains(err.Error(), "invalid cron operation: cron") + s.Contains(err.Error(), "invalid schedule operation: cron") s.Nil(result) }, }, @@ -555,12 +555,12 @@ func (s *ProcessorSchedulePublicTestSuite) TestProcessJobOperationScheduleCatego for _, tt := range tests { s.Run(tt.name, func() { a := newTestAgent(newTestAgentParams{ - jobClient: s.mockJobClient, - hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), - diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), - memProvider: memMocks.NewDefaultMockProvider(s.mockCtrl), - loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), - cronProvider: tt.setupMock(), + jobClient: s.mockJobClient, + hostProvider: hostMocks.NewDefaultMockProvider(s.mockCtrl), + diskProvider: diskMocks.NewDefaultMockProvider(s.mockCtrl), + memoryProvider: memoryMocks.NewDefaultMockProvider(s.mockCtrl), + loadProvider: loadMocks.NewDefaultMockProvider(s.mockCtrl), + cronProvider: tt.setupMock(), }) tt.validateFunc(agent.ExportProcessJobOperation(a, tt.jobRequest)) diff --git a/internal/agent/test_agent_public_test.go b/internal/agent/test_agent_public_test.go index 98720c50b..428e0a9e1 100644 --- a/internal/agent/test_agent_public_test.go +++ b/internal/agent/test_agent_public_test.go @@ -39,12 +39,12 @@ import ( "github.com/osapi-io/osapi/internal/provider/node/disk" nodeHost "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ntpProv "github.com/osapi-io/osapi/internal/provider/node/ntp" powerProv "github.com/osapi-io/osapi/internal/provider/node/power" sysctlProv "github.com/osapi-io/osapi/internal/provider/node/sysctl" timezoneProv "github.com/osapi-io/osapi/internal/provider/node/timezone" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/telemetry/process" ) @@ -58,7 +58,7 @@ type newTestAgentParams struct { streamName string hostProvider nodeHost.Provider diskProvider disk.Provider - memProvider mem.Provider + memoryProvider memory.Provider loadProvider load.Provider dnsProvider dns.Provider pingProvider ping.Provider @@ -101,7 +101,7 @@ func newTestAgent( agent.NewNodeProcessor( p.hostProvider, p.diskProvider, - p.memProvider, + p.memoryProvider, p.loadProvider, p.sysctlProvider, p.ntpProvider, @@ -115,7 +115,7 @@ func newTestAgent( p.appConfig, logger, ), - p.hostProvider, p.diskProvider, p.memProvider, p.loadProvider, + p.hostProvider, p.diskProvider, p.memoryProvider, p.loadProvider, ) registry.Register( @@ -156,7 +156,7 @@ func newTestAgent( streamName, p.hostProvider, p.diskProvider, - p.memProvider, + p.memoryProvider, p.loadProvider, p.netinfoProvider, p.processProvider, diff --git a/internal/agent/types.go b/internal/agent/types.go index fb731e6e9..bcae6fdca 100644 --- a/internal/agent/types.go +++ b/internal/agent/types.go @@ -41,7 +41,7 @@ import ( "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/telemetry/process" ) @@ -69,7 +69,7 @@ type Agent struct { // system info independently of job processing. hostProvider host.Provider diskProvider disk.Provider - memProvider mem.Provider + memoryProvider memory.Provider loadProvider load.Provider netinfoProvider netinfo.Provider diff --git a/internal/controller/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go index ca3e53d7d..e8a66dc8a 100644 --- a/internal/controller/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -43,7 +43,7 @@ import ( jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type AgentGetPublicTestSuite struct { @@ -108,7 +108,7 @@ func (s *AgentGetPublicTestSuite) TestGetAgentDetails() { OSInfo: &host.Result{Distribution: "Ubuntu", Version: "24.04"}, Uptime: 5 * time.Hour, LoadAverages: &load.Result{Load1: 0.5, Load5: 0.3, Load15: 0.2}, - MemoryStats: &mem.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, + MemoryStats: &memory.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, }, validateFunc: func(resp gen.GetAgentDetailsResponseObject) { r, ok := resp.(gen.GetAgentDetails200JSONResponse) @@ -193,7 +193,7 @@ func (s *AgentGetPublicTestSuite) TestGetAgentDetailsHTTP() { OSInfo: &host.Result{Distribution: "Ubuntu", Version: "24.04"}, Uptime: 5 * time.Hour, LoadAverages: &load.Result{Load1: 0.5, Load5: 0.3, Load15: 0.2}, - MemoryStats: &mem.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, + MemoryStats: &memory.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, }, nil) return mock }, diff --git a/internal/controller/api/agent/agent_list_public_test.go b/internal/controller/api/agent/agent_list_public_test.go index 841e6d3cc..82f0b8736 100644 --- a/internal/controller/api/agent/agent_list_public_test.go +++ b/internal/controller/api/agent/agent_list_public_test.go @@ -44,7 +44,7 @@ import ( jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type AgentListPublicTestSuite struct { @@ -91,7 +91,7 @@ func (s *AgentListPublicTestSuite) TestListAgents() { OSInfo: &host.Result{Distribution: "Ubuntu", Version: "24.04"}, Uptime: 5 * time.Hour, LoadAverages: &load.Result{Load1: 0.5, Load5: 0.3, Load15: 0.2}, - MemoryStats: &mem.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, + MemoryStats: &memory.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, }, {Hostname: "server2"}, }, diff --git a/internal/controller/api/gen/api.yaml b/internal/controller/api/gen/api.yaml index 91cfc7305..d5eddc26c 100644 --- a/internal/controller/api/gen/api.yaml +++ b/internal/controller/api/gen/api.yaml @@ -78,9 +78,9 @@ tags: - name: Process_Management_API_process_operations x-displayName: Node/Process description: Process management operations on a target node. - - name: Schedule_Management_API_cron_operations - x-displayName: Node/Schedule/Cron - description: Cron drop-in file management on a target node. + - name: Schedule_Management_API_schedule_operations + x-displayName: Node/Schedule + description: Scheduled task management on a target node. - name: Service_Management_API_service_operations x-displayName: Node/Service description: Systemd service management on a target node. @@ -4310,27 +4310,27 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /api/node/{hostname}/schedule/cron: + /api/node/{hostname}/schedule: servers: [] get: - summary: List all cron entries + summary: List all scheduled entries description: | - List all cron drop-in entries on the target node. + List all scheduled entries on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: GetNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: GetNodeSchedule security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' responses: '200': - description: List of cron entries. + description: List of scheduled entries. content: application/json: schema: - $ref: '#/components/schemas/CronCollectionResponse' + $ref: '#/components/schemas/ScheduleCollectionResponse' '400': description: Bad request - validation error. content: @@ -4350,37 +4350,37 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error listing cron entries. + description: Error listing scheduled entries. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' post: - summary: Create a cron entry + summary: Create a scheduled entry description: | - Create a new cron drop-in entry on the target node. + Create a new scheduled entry on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: PostNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: PostNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' requestBody: - description: Cron entry creation parameters. + description: Scheduled entry creation parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronCreateRequest' + $ref: '#/components/schemas/ScheduleCreateRequest' responses: '200': - description: Cron entry created. + description: Scheduled entry created. content: application/json: schema: - $ref: '#/components/schemas/CronCreateResponse' + $ref: '#/components/schemas/ScheduleCreateResponse' '400': description: Invalid request payload. content: @@ -4400,33 +4400,33 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error creating cron entry. + description: Error creating scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /api/node/{hostname}/schedule/cron/{name}: + /api/node/{hostname}/schedule/{name}: servers: [] get: - summary: Get a cron entry + summary: Get a scheduled entry description: | - Get a specific cron drop-in entry by name on the target node. + Get a specific scheduled entry by name on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: GetNodeScheduleCronByName + - Schedule_Management_API_schedule_operations + operationId: GetNodeScheduleByName security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry detail. + description: Scheduled entry detail. content: application/json: schema: - $ref: '#/components/schemas/CronGetResponse' + $ref: '#/components/schemas/ScheduleGetResponse' '400': description: Bad request - validation error. content: @@ -4446,44 +4446,44 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error retrieving cron entry. + description: Error retrieving scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' put: - summary: Update a cron entry + summary: Update a scheduled entry description: | - Update an existing cron drop-in entry on the target node. + Update an existing scheduled entry on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: PutNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: PutNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' requestBody: - description: Cron entry update parameters. + description: Scheduled entry update parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronUpdateRequest' + $ref: '#/components/schemas/ScheduleUpdateRequest' responses: '200': - description: Cron entry updated. + description: Scheduled entry updated. content: application/json: schema: - $ref: '#/components/schemas/CronUpdateResponse' + $ref: '#/components/schemas/ScheduleUpdateResponse' '400': description: Invalid request payload. content: @@ -4503,37 +4503,37 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error updating cron entry. + description: Error updating scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' delete: - summary: Delete a cron entry + summary: Delete a scheduled entry description: | - Delete a cron drop-in entry from the target node. + Delete a scheduled entry from the target node. tags: - - Schedule_Management_API_cron_operations - operationId: DeleteNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: DeleteNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry deleted. + description: Scheduled entry deleted. content: application/json: schema: - $ref: '#/components/schemas/CronDeleteResponse' + $ref: '#/components/schemas/ScheduleDeleteResponse' '400': description: Bad request - validation error. content: @@ -4553,13 +4553,13 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error deleting cron entry. + description: Error deleting scheduled entry. content: application/json: schema: @@ -9748,7 +9748,7 @@ components: $ref: '#/components/schemas/ProcessSignalResult' required: - results - CronCreateRequest: + ScheduleCreateRequest: type: object required: - name @@ -9757,15 +9757,15 @@ components: name: type: string description: > - Name for the cron drop-in entry. Used as the file name under + Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. x-oapi-codegen-extra-tags: validate: required,min=1,max=64 object: type: string description: > - Name of the uploaded file in the object store to deploy as the cron - entry content. + Name of the uploaded file in the object store to deploy as the + scheduled entry content. x-oapi-codegen-extra-tags: validate: required,min=1 schedule: @@ -9812,7 +9812,7 @@ components: additionalProperties: true description: | Template variables. Only used when content_type is "template". - CronUpdateRequest: + ScheduleUpdateRequest: type: object properties: object: @@ -9844,9 +9844,9 @@ components: additionalProperties: true description: | Template variables. - CronEntry: + ScheduleEntry: type: object - description: A cron drop-in entry. + description: A scheduled entry. properties: hostname: type: string @@ -9861,7 +9861,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. object: type: string description: Object store name for the deployed content. @@ -9886,14 +9886,14 @@ components: "monthly". user: type: string - description: User the cron entry runs as. + description: User the scheduled entry runs as. error: type: string description: Error message if the agent failed to retrieve this entry. required: - hostname - status - CronCollectionResponse: + ScheduleCollectionResponse: type: object properties: job_id: @@ -9904,12 +9904,12 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronGetResponse: + ScheduleGetResponse: type: object - description: Collection response for a single cron entry get operation. + description: Collection response for a single scheduled entry get operation. properties: job_id: type: string @@ -9919,10 +9919,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronMutationResult: + ScheduleMutationResult: type: object description: Result of a cron create, update, or delete operation for one host. properties: @@ -9939,7 +9939,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. changed: type: boolean description: Whether the operation modified system state. @@ -9949,7 +9949,7 @@ components: required: - hostname - status - CronCreateResponse: + ScheduleCreateResponse: type: object properties: job_id: @@ -9960,10 +9960,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronUpdateResponse: + ScheduleUpdateResponse: type: object properties: job_id: @@ -9974,10 +9974,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronDeleteResponse: + ScheduleDeleteResponse: type: object properties: job_id: @@ -9988,7 +9988,7 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results ServiceCreateRequest: @@ -10952,13 +10952,13 @@ components: schema: type: integer minimum: 1 - CronName: + ScheduleName: name: name in: path required: true description: > - Cron entry name. Must contain only alphanumeric characters, underscores, - and hyphens. + Scheduled entry name. Must contain only alphanumeric characters, + underscores, and hyphens. x-oapi-codegen-extra-tags: validate: required,min=1 schema: @@ -11095,7 +11095,7 @@ x-tagGroups: - Process_Management_API_process_operations - name: Schedule Management API tags: - - Schedule_Management_API_cron_operations + - Schedule_Management_API_schedule_operations - name: Service Management API tags: - Service_Management_API_service_operations diff --git a/internal/controller/api/node/docker/container.go b/internal/controller/api/node/container/container.go similarity index 95% rename from internal/controller/api/node/docker/container.go rename to internal/controller/api/node/container/container.go index e95ab65cb..d44c87b99 100644 --- a/internal/controller/api/node/docker/container.go +++ b/internal/controller/api/node/container/container.go @@ -24,7 +24,7 @@ package container import ( "log/slog" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job/client" ) diff --git a/internal/controller/api/node/docker/convert.go b/internal/controller/api/node/container/convert.go similarity index 100% rename from internal/controller/api/node/docker/convert.go rename to internal/controller/api/node/container/convert.go diff --git a/internal/controller/api/node/docker/convert_public_test.go b/internal/controller/api/node/container/convert_public_test.go similarity index 99% rename from internal/controller/api/node/docker/convert_public_test.go rename to internal/controller/api/node/container/convert_public_test.go index ff3b297fc..484ed3977 100644 --- a/internal/controller/api/node/docker/convert_public_test.go +++ b/internal/controller/api/node/container/convert_public_test.go @@ -25,7 +25,7 @@ import ( "github.com/stretchr/testify/suite" - container "github.com/osapi-io/osapi/internal/controller/api/node/docker" + container "github.com/osapi-io/osapi/internal/controller/api/node/container" "github.com/osapi-io/osapi/internal/job" ) diff --git a/internal/controller/api/node/docker/container_create.go b/internal/controller/api/node/container/docker_create.go similarity index 98% rename from internal/controller/api/node/docker/container_create.go rename to internal/controller/api/node/container/docker_create.go index 8ea095d5b..c77a7aca6 100644 --- a/internal/controller/api/node/docker/container_create.go +++ b/internal/controller/api/node/container/docker_create.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_create_public_test.go b/internal/controller/api/node/container/docker_create_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_create_public_test.go rename to internal/controller/api/node/container/docker_create_public_test.go index ad73ce1e6..e93c5d518 100644 --- a/internal/controller/api/node/docker/container_create_public_test.go +++ b/internal/controller/api/node/container/docker_create_public_test.go @@ -40,8 +40,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_exec.go b/internal/controller/api/node/container/docker_exec.go similarity index 98% rename from internal/controller/api/node/docker/container_exec.go rename to internal/controller/api/node/container/docker_exec.go index 715eeb7ba..c84c25840 100644 --- a/internal/controller/api/node/docker/container_exec.go +++ b/internal/controller/api/node/container/docker_exec.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_exec_public_test.go b/internal/controller/api/node/container/docker_exec_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_exec_public_test.go rename to internal/controller/api/node/container/docker_exec_public_test.go index f8c3432c1..93f7c8c9b 100644 --- a/internal/controller/api/node/docker/container_exec_public_test.go +++ b/internal/controller/api/node/container/docker_exec_public_test.go @@ -40,8 +40,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_image_remove.go b/internal/controller/api/node/container/docker_image_remove.go similarity index 98% rename from internal/controller/api/node/docker/container_image_remove.go rename to internal/controller/api/node/container/docker_image_remove.go index 9df5cd6ee..0ff16c136 100644 --- a/internal/controller/api/node/docker/container_image_remove.go +++ b/internal/controller/api/node/container/docker_image_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_image_remove_public_test.go b/internal/controller/api/node/container/docker_image_remove_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_image_remove_public_test.go rename to internal/controller/api/node/container/docker_image_remove_public_test.go index f9dfcd396..fa856827d 100644 --- a/internal/controller/api/node/docker/container_image_remove_public_test.go +++ b/internal/controller/api/node/container/docker_image_remove_public_test.go @@ -38,8 +38,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_inspect.go b/internal/controller/api/node/container/docker_inspect.go similarity index 98% rename from internal/controller/api/node/docker/container_inspect.go rename to internal/controller/api/node/container/docker_inspect.go index a9c083831..5cc562289 100644 --- a/internal/controller/api/node/docker/container_inspect.go +++ b/internal/controller/api/node/container/docker_inspect.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_inspect_public_test.go b/internal/controller/api/node/container/docker_inspect_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_inspect_public_test.go rename to internal/controller/api/node/container/docker_inspect_public_test.go index e2ba8a323..eab335942 100644 --- a/internal/controller/api/node/docker/container_inspect_public_test.go +++ b/internal/controller/api/node/container/docker_inspect_public_test.go @@ -37,8 +37,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_list.go b/internal/controller/api/node/container/docker_list.go similarity index 98% rename from internal/controller/api/node/docker/container_list.go rename to internal/controller/api/node/container/docker_list.go index 1ffa1438d..bea882e79 100644 --- a/internal/controller/api/node/docker/container_list.go +++ b/internal/controller/api/node/container/docker_list.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_list_public_test.go b/internal/controller/api/node/container/docker_list_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_list_public_test.go rename to internal/controller/api/node/container/docker_list_public_test.go index bbc09631a..cd5968481 100644 --- a/internal/controller/api/node/docker/container_list_public_test.go +++ b/internal/controller/api/node/container/docker_list_public_test.go @@ -39,8 +39,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_pull.go b/internal/controller/api/node/container/docker_pull.go similarity index 98% rename from internal/controller/api/node/docker/container_pull.go rename to internal/controller/api/node/container/docker_pull.go index e2a1ed629..d6b32945f 100644 --- a/internal/controller/api/node/docker/container_pull.go +++ b/internal/controller/api/node/container/docker_pull.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_pull_public_test.go b/internal/controller/api/node/container/docker_pull_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_pull_public_test.go rename to internal/controller/api/node/container/docker_pull_public_test.go index 848871b40..f00795acd 100644 --- a/internal/controller/api/node/docker/container_pull_public_test.go +++ b/internal/controller/api/node/container/docker_pull_public_test.go @@ -40,8 +40,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_remove.go b/internal/controller/api/node/container/docker_remove.go similarity index 98% rename from internal/controller/api/node/docker/container_remove.go rename to internal/controller/api/node/container/docker_remove.go index 2eca55edb..7f188313d 100644 --- a/internal/controller/api/node/docker/container_remove.go +++ b/internal/controller/api/node/container/docker_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_remove_public_test.go b/internal/controller/api/node/container/docker_remove_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_remove_public_test.go rename to internal/controller/api/node/container/docker_remove_public_test.go index 6c8f7d6a8..fc5886de5 100644 --- a/internal/controller/api/node/docker/container_remove_public_test.go +++ b/internal/controller/api/node/container/docker_remove_public_test.go @@ -38,8 +38,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_start.go b/internal/controller/api/node/container/docker_start.go similarity index 98% rename from internal/controller/api/node/docker/container_start.go rename to internal/controller/api/node/container/docker_start.go index 847412a05..917633a63 100644 --- a/internal/controller/api/node/docker/container_start.go +++ b/internal/controller/api/node/container/docker_start.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_start_public_test.go b/internal/controller/api/node/container/docker_start_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_start_public_test.go rename to internal/controller/api/node/container/docker_start_public_test.go index 25a68cfc6..c83ae2cec 100644 --- a/internal/controller/api/node/docker/container_start_public_test.go +++ b/internal/controller/api/node/container/docker_start_public_test.go @@ -38,8 +38,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/container_stop.go b/internal/controller/api/node/container/docker_stop.go similarity index 98% rename from internal/controller/api/node/docker/container_stop.go rename to internal/controller/api/node/container/docker_stop.go index c208724bb..ddb848d80 100644 --- a/internal/controller/api/node/docker/container_stop.go +++ b/internal/controller/api/node/container/docker_stop.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/validation" ) diff --git a/internal/controller/api/node/docker/container_stop_public_test.go b/internal/controller/api/node/container/docker_stop_public_test.go similarity index 99% rename from internal/controller/api/node/docker/container_stop_public_test.go rename to internal/controller/api/node/container/docker_stop_public_test.go index c6740a5fc..cd0401dbc 100644 --- a/internal/controller/api/node/docker/container_stop_public_test.go +++ b/internal/controller/api/node/container/docker_stop_public_test.go @@ -39,8 +39,8 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/config" "github.com/osapi-io/osapi/internal/controller/api" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" - "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" + "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/validation" diff --git a/internal/controller/api/node/docker/export_test.go b/internal/controller/api/node/container/export_test.go similarity index 100% rename from internal/controller/api/node/docker/export_test.go rename to internal/controller/api/node/container/export_test.go diff --git a/internal/controller/api/node/docker/gen/api.yaml b/internal/controller/api/node/container/gen/api.yaml similarity index 100% rename from internal/controller/api/node/docker/gen/api.yaml rename to internal/controller/api/node/container/gen/api.yaml diff --git a/internal/controller/api/node/docker/gen/cfg.yaml b/internal/controller/api/node/container/gen/cfg.yaml similarity index 100% rename from internal/controller/api/node/docker/gen/cfg.yaml rename to internal/controller/api/node/container/gen/cfg.yaml diff --git a/internal/controller/api/node/docker/gen/docker.gen.go b/internal/controller/api/node/container/gen/docker.gen.go similarity index 100% rename from internal/controller/api/node/docker/gen/docker.gen.go rename to internal/controller/api/node/container/gen/docker.gen.go diff --git a/internal/controller/api/node/docker/gen/generate.go b/internal/controller/api/node/container/gen/generate.go similarity index 100% rename from internal/controller/api/node/docker/gen/generate.go rename to internal/controller/api/node/container/gen/generate.go diff --git a/internal/controller/api/node/docker/handler.go b/internal/controller/api/node/container/handler.go similarity index 96% rename from internal/controller/api/node/docker/handler.go rename to internal/controller/api/node/container/handler.go index 0494996d6..feb038f3f 100644 --- a/internal/controller/api/node/docker/handler.go +++ b/internal/controller/api/node/container/handler.go @@ -27,7 +27,7 @@ import ( "github.com/osapi-io/osapi/internal/authtoken" "github.com/osapi-io/osapi/internal/controller/api" - gen "github.com/osapi-io/osapi/internal/controller/api/node/docker/gen" + gen "github.com/osapi-io/osapi/internal/controller/api/node/container/gen" "github.com/osapi-io/osapi/internal/job/client" ) diff --git a/internal/controller/api/node/docker/handler_public_test.go b/internal/controller/api/node/container/handler_public_test.go similarity index 99% rename from internal/controller/api/node/docker/handler_public_test.go rename to internal/controller/api/node/container/handler_public_test.go index d61b79fc8..e0e923704 100644 --- a/internal/controller/api/node/docker/handler_public_test.go +++ b/internal/controller/api/node/container/handler_public_test.go @@ -30,7 +30,7 @@ import ( "github.com/stretchr/testify/suite" "go.uber.org/mock/gomock" - apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/docker" + apicontainer "github.com/osapi-io/osapi/internal/controller/api/node/container" "github.com/osapi-io/osapi/internal/job/mocks" ) diff --git a/internal/controller/api/node/docker/types.go b/internal/controller/api/node/container/types.go similarity index 100% rename from internal/controller/api/node/docker/types.go rename to internal/controller/api/node/container/types.go diff --git a/internal/controller/api/node/docker/validate.go b/internal/controller/api/node/container/validate.go similarity index 100% rename from internal/controller/api/node/docker/validate.go rename to internal/controller/api/node/container/validate.go diff --git a/internal/controller/api/node/node_memory_get.go b/internal/controller/api/node/node_memory_get.go index 384e36178..7edd8d838 100644 --- a/internal/controller/api/node/node_memory_get.go +++ b/internal/controller/api/node/node_memory_get.go @@ -29,7 +29,7 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/gen" "github.com/osapi-io/osapi/internal/job" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) // GetNodeMemory get the node memory stats API endpoint. @@ -82,7 +82,7 @@ func (s *Node) GetNodeMemory( }, nil } - var memStats mem.Result + var memStats memory.Result if rawResp.Data != nil { _ = json.Unmarshal(rawResp.Data, &memStats) } @@ -136,7 +136,7 @@ func (s *Node) getNodeMemoryBroadcast( item.Error = &e default: item.Status = gen.MemoryResultItemStatusOk - var memStats mem.Result + var memStats memory.Result if resp.Data != nil { _ = json.Unmarshal(resp.Data, &memStats) } @@ -154,10 +154,10 @@ func (s *Node) getNodeMemoryBroadcast( }, nil } -// buildMemoryResultItem converts mem.Result to a MemoryResultItem. +// buildMemoryResultItem converts memory.Result to a MemoryResultItem. func buildMemoryResultItem( hostname string, - memStats *mem.Result, + memStats *memory.Result, ) *gen.MemoryResultItem { changed := false item := &gen.MemoryResultItem{ diff --git a/internal/controller/api/node/node_memory_get_public_test.go b/internal/controller/api/node/node_memory_get_public_test.go index f9e58b45c..4d5c14723 100644 --- a/internal/controller/api/node/node_memory_get_public_test.go +++ b/internal/controller/api/node/node_memory_get_public_test.go @@ -41,7 +41,7 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/gen" "github.com/osapi-io/osapi/internal/job" jobmocks "github.com/osapi-io/osapi/internal/job/mocks" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/validation" ) @@ -89,7 +89,7 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemory() { name: "success", request: gen.GetNodeMemoryRequestObject{Hostname: "_any"}, setupMock: func() { - memResult := mem.Result{ + memResult := memory.Result{ Total: 8192, Free: 4096, Cached: 2048, @@ -160,8 +160,8 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemory() { name: "broadcast all success", request: gen.GetNodeMemoryRequestObject{Hostname: "_all"}, setupMock: func() { - mem1 := mem.Result{Total: 8192, Free: 4096, Cached: 2048} - mem2 := mem.Result{Total: 16384, Free: 8192, Cached: 4096} + mem1 := memory.Result{Total: 8192, Free: 4096, Cached: 2048} + mem2 := memory.Result{Total: 16384, Free: 8192, Cached: 4096} data1, _ := json.Marshal(mem1) data2, _ := json.Marshal(mem2) s.mockJobClient.EXPECT(). @@ -185,7 +185,7 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemory() { name: "broadcast all with errors", request: gen.GetNodeMemoryRequestObject{Hostname: "_all"}, setupMock: func() { - mem1 := mem.Result{Total: 8192, Free: 4096, Cached: 2048} + mem1 := memory.Result{Total: 8192, Free: 4096, Cached: 2048} data1, _ := json.Marshal(mem1) s.mockJobClient.EXPECT(). QueryBroadcast(gomock.Any(), "_all", "node", job.OperationNodeMemoryGet, gomock.Any()). @@ -323,7 +323,7 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemoryValidationHTTP() { path: "/api/node/server1/memory", setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) - memResult := mem.Result{Total: 8192, Free: 4096, Cached: 2048} + memResult := memory.Result{Total: 8192, Free: 4096, Cached: 2048} data, _ := json.Marshal(memResult) mock.EXPECT(). Query(gomock.Any(), "server1", "node", job.OperationNodeMemoryGet, gomock.Any()). @@ -446,7 +446,7 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemoryRBACHTTP() { }, setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) - memResult := mem.Result{Total: 8192, Free: 4096, Cached: 2048} + memResult := memory.Result{Total: 8192, Free: 4096, Cached: 2048} data, _ := json.Marshal(memResult) mock.EXPECT(). Query(gomock.Any(), "server1", "node", job.OperationNodeMemoryGet, gomock.Any()). diff --git a/internal/controller/api/node/node_status_get_public_test.go b/internal/controller/api/node/node_status_get_public_test.go index 83da77199..4873c68b8 100644 --- a/internal/controller/api/node/node_status_get_public_test.go +++ b/internal/controller/api/node/node_status_get_public_test.go @@ -46,7 +46,7 @@ import ( "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/internal/validation" ) @@ -401,7 +401,7 @@ func (s *NodeStatusGetPublicTestSuite) TestGetNodeStatusValidationHTTP() { Load5: 0.5, Load15: 0.2, }, - MemoryStats: &mem.Result{ + MemoryStats: &memory.Result{ Total: 8388608, Free: 4194304, Cached: 2097152, @@ -601,7 +601,7 @@ func (s *NodeStatusGetPublicTestSuite) TestGetNodeStatusRBACHTTP() { Load5: 0.5, Load15: 0.2, }, - MemoryStats: &mem.Result{ + MemoryStats: &memory.Result{ Total: 8388608, Free: 4194304, Cached: 2097152, diff --git a/internal/controller/api/node/schedule/cron_create.go b/internal/controller/api/node/schedule/create.go similarity index 72% rename from internal/controller/api/node/schedule/cron_create.go rename to internal/controller/api/node/schedule/create.go index f8e0cd00a..15215ae89 100644 --- a/internal/controller/api/node/schedule/cron_create.go +++ b/internal/controller/api/node/schedule/create.go @@ -29,21 +29,21 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/schedule/gen" "github.com/osapi-io/osapi/internal/job" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/validation" ) -// PostNodeScheduleCron creates a cron entry on a target node. -func (s *Schedule) PostNodeScheduleCron( +// PostNodeSchedule creates a cron entry on a target node. +func (s *Schedule) PostNodeSchedule( ctx context.Context, - request gen.PostNodeScheduleCronRequestObject, -) (gen.PostNodeScheduleCronResponseObject, error) { + request gen.PostNodeScheduleRequestObject, +) (gen.PostNodeScheduleResponseObject, error) { if errMsg, ok := validateHostname(request.Hostname); !ok { - return gen.PostNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.PostNodeSchedule400JSONResponse{Error: &errMsg}, nil } if errMsg, ok := validation.Struct(request.Body); !ok { - return gen.PostNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.PostNodeSchedule400JSONResponse{Error: &errMsg}, nil } entry := cronProv.Entry{ @@ -77,7 +77,7 @@ func (s *Schedule) PostNodeScheduleCron( ) if job.IsBroadcastTarget(hostname) { - return s.postNodeScheduleCronCreateBroadcast(ctx, hostname, entry) + return s.postNodeScheduleCreateBroadcast(ctx, hostname, entry) } jobID, resp, err := s.JobClient.Modify( @@ -89,18 +89,18 @@ func (s *Schedule) PostNodeScheduleCron( ) if err != nil { errMsg := err.Error() - return gen.PostNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.PostNodeSchedule500JSONResponse{Error: &errMsg}, nil } if resp.Status == job.StatusSkipped { jobUUID := uuid.MustParse(jobID) e := resp.Error - return gen.PostNodeScheduleCron200JSONResponse{ + return gen.PostNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: resp.Hostname, - Status: gen.CronMutationResultStatusSkipped, + Status: gen.ScheduleMutationResultStatusSkipped, Error: &e, }, }, @@ -117,12 +117,12 @@ func (s *Schedule) PostNodeScheduleCron( name := result.Name agentHostname := resp.Hostname - return gen.PostNodeScheduleCron200JSONResponse{ + return gen.PostNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: agentHostname, - Status: gen.CronMutationResultStatusOk, + Status: gen.ScheduleMutationResultStatusOk, Name: &name, Changed: changed, }, @@ -130,12 +130,12 @@ func (s *Schedule) PostNodeScheduleCron( }, nil } -// postNodeScheduleCronCreateBroadcast handles broadcast targets for cron create. -func (s *Schedule) postNodeScheduleCronCreateBroadcast( +// postNodeScheduleCreateBroadcast handles broadcast targets for cron create. +func (s *Schedule) postNodeScheduleCreateBroadcast( ctx context.Context, target string, entry cronProv.Entry, -) (gen.PostNodeScheduleCronResponseObject, error) { +) (gen.PostNodeScheduleResponseObject, error) { jobID, responses, err := s.JobClient.ModifyBroadcast( ctx, target, @@ -145,29 +145,29 @@ func (s *Schedule) postNodeScheduleCronCreateBroadcast( ) if err != nil { errMsg := err.Error() - return gen.PostNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.PostNodeSchedule500JSONResponse{Error: &errMsg}, nil } - var apiResponses []gen.CronMutationResult + var apiResponses []gen.ScheduleMutationResult for host, resp := range responses { - item := gen.CronMutationResult{ + item := gen.ScheduleMutationResult{ Hostname: host, } switch resp.Status { case job.StatusFailed: - item.Status = gen.CronMutationResultStatusFailed + item.Status = gen.ScheduleMutationResultStatusFailed e := resp.Error item.Error = &e case job.StatusSkipped: - item.Status = gen.CronMutationResultStatusSkipped + item.Status = gen.ScheduleMutationResultStatusSkipped e := resp.Error item.Error = &e case job.StatusTimeout: - item.Status = gen.CronMutationResultStatusTimeout + item.Status = gen.ScheduleMutationResultStatusTimeout e := resp.Error item.Error = &e default: - item.Status = gen.CronMutationResultStatusOk + item.Status = gen.ScheduleMutationResultStatusOk var result cronProv.CreateResult if resp.Data != nil { _ = json.Unmarshal(resp.Data, &result) @@ -181,7 +181,7 @@ func (s *Schedule) postNodeScheduleCronCreateBroadcast( jobUUID := uuid.MustParse(jobID) - return gen.PostNodeScheduleCron200JSONResponse{ + return gen.PostNodeSchedule200JSONResponse{ JobId: &jobUUID, Results: apiResponses, }, nil diff --git a/internal/controller/api/node/schedule/cron_create_public_test.go b/internal/controller/api/node/schedule/create_public_test.go similarity index 78% rename from internal/controller/api/node/schedule/cron_create_public_test.go rename to internal/controller/api/node/schedule/create_public_test.go index 90bacc90c..97b9cbedf 100644 --- a/internal/controller/api/node/schedule/cron_create_public_test.go +++ b/internal/controller/api/node/schedule/create_public_test.go @@ -47,7 +47,7 @@ import ( "github.com/osapi-io/osapi/internal/validation" ) -type CronCreatePublicTestSuite struct { +type ScheduleCreatePublicTestSuite struct { suite.Suite mockCtrl *gomock.Controller @@ -58,7 +58,7 @@ type CronCreatePublicTestSuite struct { logger *slog.Logger } -func (s *CronCreatePublicTestSuite) SetupSuite() { +func (s *ScheduleCreatePublicTestSuite) SetupSuite() { validation.RegisterTargetValidator(func(_ context.Context) ([]validation.AgentTarget, error) { return []validation.AgentTarget{ {Hostname: "server1", Labels: map[string]string{"group": "web"}}, @@ -67,7 +67,7 @@ func (s *CronCreatePublicTestSuite) SetupSuite() { }) } -func (s *CronCreatePublicTestSuite) SetupTest() { +func (s *ScheduleCreatePublicTestSuite) SetupTest() { s.mockCtrl = gomock.NewController(s.T()) s.mockJobClient = jobmocks.NewMockJobClient(s.mockCtrl) s.handler = apischedule.New(slog.Default(), s.mockJobClient) @@ -76,27 +76,27 @@ func (s *CronCreatePublicTestSuite) SetupTest() { s.logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } -func (s *CronCreatePublicTestSuite) TearDownTest() { +func (s *ScheduleCreatePublicTestSuite) TearDownTest() { s.mockCtrl.Finish() } -func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { +func (s *ScheduleCreatePublicTestSuite) TestPostNodeSchedule() { tests := []struct { name string - request gen.PostNodeScheduleCronRequestObject + request gen.PostNodeScheduleRequestObject setupMock func() - validateFunc func(resp gen.PostNodeScheduleCronResponseObject) + validateFunc func(resp gen.PostNodeScheduleResponseObject) }{ { name: "success", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", User: ptr.To("root"), - ContentType: (*gen.CronCreateRequestContentType)(ptr.To("template")), + ContentType: (*gen.ScheduleCreateRequestContentType)(ptr.To("template")), Vars: &map[string]interface{}{"region": "us-east"}, }, }, @@ -120,8 +120,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -133,9 +133,9 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "success with nil user", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", @@ -161,8 +161,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -171,11 +171,11 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "success with interval instead of schedule", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "daily-backup", - Interval: ptr.To(gen.CronCreateRequestIntervalDaily), + Interval: ptr.To(gen.ScheduleCreateRequestIntervalDaily), Object: "/usr/bin/backup.sh", }, }, @@ -199,8 +199,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -209,9 +209,9 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "success with nil response data", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", @@ -237,8 +237,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -247,9 +247,9 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "broadcast success", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "_all", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", @@ -279,8 +279,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -288,9 +288,9 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "broadcast with errors", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "_all", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", @@ -319,8 +319,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -328,9 +328,9 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "broadcast with skipped host", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "_all", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", @@ -353,21 +353,21 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "broadcast with a host that never answered", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "_all", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", @@ -390,21 +390,21 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusTimeout, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusTimeout, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "timeout: agent did not respond") }, }, { name: "broadcast error collecting responses", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "_all", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "backup-script", @@ -421,24 +421,24 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - _, ok := resp.(gen.PostNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + _, ok := resp.(gen.PostNodeSchedule500JSONResponse) s.True(ok) }, }, { name: "validation error empty hostname", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "required") @@ -446,33 +446,33 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "body validation error empty name", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) }, }, { name: "validation error neither schedule nor interval", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Object: "/usr/bin/backup.sh", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "Schedule") @@ -480,35 +480,35 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "validation error both schedule and interval", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), - Interval: ptr.To(gen.CronCreateRequestIntervalDaily), + Interval: ptr.To(gen.ScheduleCreateRequestIntervalDaily), Object: "/usr/bin/backup.sh", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) }, }, { name: "validation error invalid cron schedule expression", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("not-a-cron"), Object: "/usr/bin/backup.sh", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "cron_schedule") @@ -516,26 +516,26 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { }, { name: "body validation error empty command", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "", }, }, setupMock: func() {}, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) }, }, { name: "when job skipped", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", @@ -560,22 +560,22 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PostNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + r, ok := resp.(gen.PostNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) s.Equal("server1", r.Results[0].Hostname) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "job client error", - request: gen.PostNodeScheduleCronRequestObject{ + request: gen.PostNodeScheduleRequestObject{ Hostname: "server1", - Body: &gen.PostNodeScheduleCronJSONRequestBody{ + Body: &gen.PostNodeScheduleJSONRequestBody{ Name: "backup", Schedule: ptr.To("0 2 * * *"), Object: "/usr/bin/backup.sh", @@ -592,8 +592,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.PostNodeScheduleCronResponseObject) { - _, ok := resp.(gen.PostNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.PostNodeScheduleResponseObject) { + _, ok := resp.(gen.PostNodeSchedule500JSONResponse) s.True(ok) }, }, @@ -603,14 +603,14 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCron() { s.Run(tt.name, func() { tt.setupMock() - resp, err := s.handler.PostNodeScheduleCron(s.ctx, tt.request) + resp, err := s.handler.PostNodeSchedule(s.ctx, tt.request) s.NoError(err) tt.validateFunc(resp) }) } } -func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronValidationHTTP() { +func (s *ScheduleCreatePublicTestSuite) TestPostNodeScheduleValidationHTTP() { tests := []struct { name string path string @@ -620,7 +620,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronValidationHTTP() { }{ { name: "when valid request", - path: "/api/node/server1/schedule/cron", + path: "/api/node/server1/schedule", body: `{"name":"backup","schedule":"0 2 * * *","object":"backup-script"}`, setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) @@ -646,7 +646,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronValidationHTTP() { }, { name: "when missing name", - path: "/api/node/server1/schedule/cron", + path: "/api/node/server1/schedule", body: `{"schedule":"0 2 * * *","object":"backup-script"}`, setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) @@ -660,7 +660,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronValidationHTTP() { }, { name: "when target agent not found", - path: "/api/node/nonexistent/schedule/cron", + path: "/api/node/nonexistent/schedule", body: `{"name":"backup","schedule":"0 2 * * *","object":"backup-script"}`, setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) @@ -700,7 +700,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronValidationHTTP() { const rbacCronCreateTestSigningKey = "test-signing-key-for-rbac-cron-create" -func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronRBACHTTP() { +func (s *ScheduleCreatePublicTestSuite) TestPostNodeScheduleRBACHTTP() { tokenManager := authtoken.New(s.logger) tests := []struct { @@ -729,7 +729,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronRBACHTTP() { rbacCronCreateTestSigningKey, []string{"read"}, "test-user", - []string{"cron:read"}, + []string{"schedule:read"}, ) s.Require().NoError(err) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) @@ -803,7 +803,7 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronRBACHTTP() { req := httptest.NewRequest( http.MethodPost, - "/api/node/server1/schedule/cron", + "/api/node/server1/schedule", strings.NewReader( `{"name":"backup","schedule":"0 2 * * *","object":"backup-script"}`, ), @@ -819,8 +819,8 @@ func (s *CronCreatePublicTestSuite) TestPostNodeScheduleCronRBACHTTP() { } } -func TestCronCreatePublicTestSuite( +func TestScheduleCreatePublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronCreatePublicTestSuite)) + suite.Run(t, new(ScheduleCreatePublicTestSuite)) } diff --git a/internal/controller/api/node/schedule/cron_delete.go b/internal/controller/api/node/schedule/delete.go similarity index 70% rename from internal/controller/api/node/schedule/cron_delete.go rename to internal/controller/api/node/schedule/delete.go index f46dbe68c..5672a0908 100644 --- a/internal/controller/api/node/schedule/cron_delete.go +++ b/internal/controller/api/node/schedule/delete.go @@ -29,18 +29,18 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/schedule/gen" "github.com/osapi-io/osapi/internal/job" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/controller/api/apierr" ) -// DeleteNodeScheduleCron deletes a cron entry on a target node. -func (s *Schedule) DeleteNodeScheduleCron( +// DeleteNodeSchedule deletes a cron entry on a target node. +func (s *Schedule) DeleteNodeSchedule( ctx context.Context, - request gen.DeleteNodeScheduleCronRequestObject, -) (gen.DeleteNodeScheduleCronResponseObject, error) { + request gen.DeleteNodeScheduleRequestObject, +) (gen.DeleteNodeScheduleResponseObject, error) { if errMsg, ok := validateHostname(request.Hostname); !ok { - return gen.DeleteNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.DeleteNodeSchedule400JSONResponse{Error: &errMsg}, nil } hostname := request.Hostname @@ -54,7 +54,7 @@ func (s *Schedule) DeleteNodeScheduleCron( ) if job.IsBroadcastTarget(hostname) { - return s.deleteNodeScheduleCronBroadcast(ctx, hostname, name) + return s.deleteNodeScheduleBroadcast(ctx, hostname, name) } jobID, resp, err := s.JobClient.Modify( @@ -67,20 +67,20 @@ func (s *Schedule) DeleteNodeScheduleCron( if err != nil { errMsg := err.Error() if apierr.IsMissing(err) { - return gen.DeleteNodeScheduleCron404JSONResponse{Error: &errMsg}, nil + return gen.DeleteNodeSchedule404JSONResponse{Error: &errMsg}, nil } - return gen.DeleteNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.DeleteNodeSchedule500JSONResponse{Error: &errMsg}, nil } if resp.Status == job.StatusSkipped { jobUUID := uuid.MustParse(jobID) e := resp.Error - return gen.DeleteNodeScheduleCron200JSONResponse{ + return gen.DeleteNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: resp.Hostname, - Status: gen.CronMutationResultStatusSkipped, + Status: gen.ScheduleMutationResultStatusSkipped, Error: &e, }, }, @@ -97,12 +97,12 @@ func (s *Schedule) DeleteNodeScheduleCron( resultName := result.Name agentHostname := resp.Hostname - return gen.DeleteNodeScheduleCron200JSONResponse{ + return gen.DeleteNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: agentHostname, - Status: gen.CronMutationResultStatusOk, + Status: gen.ScheduleMutationResultStatusOk, Name: &resultName, Changed: changed, }, @@ -110,12 +110,12 @@ func (s *Schedule) DeleteNodeScheduleCron( }, nil } -// deleteNodeScheduleCronBroadcast handles broadcast targets for cron delete. -func (s *Schedule) deleteNodeScheduleCronBroadcast( +// deleteNodeScheduleBroadcast handles broadcast targets for cron delete. +func (s *Schedule) deleteNodeScheduleBroadcast( ctx context.Context, target string, name string, -) (gen.DeleteNodeScheduleCronResponseObject, error) { +) (gen.DeleteNodeScheduleResponseObject, error) { jobID, responses, err := s.JobClient.ModifyBroadcast( ctx, target, @@ -125,29 +125,29 @@ func (s *Schedule) deleteNodeScheduleCronBroadcast( ) if err != nil { errMsg := err.Error() - return gen.DeleteNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.DeleteNodeSchedule500JSONResponse{Error: &errMsg}, nil } - var apiResponses []gen.CronMutationResult + var apiResponses []gen.ScheduleMutationResult for host, resp := range responses { - item := gen.CronMutationResult{ + item := gen.ScheduleMutationResult{ Hostname: host, } switch resp.Status { case job.StatusFailed: - item.Status = gen.CronMutationResultStatusFailed + item.Status = gen.ScheduleMutationResultStatusFailed e := resp.Error item.Error = &e case job.StatusSkipped: - item.Status = gen.CronMutationResultStatusSkipped + item.Status = gen.ScheduleMutationResultStatusSkipped e := resp.Error item.Error = &e case job.StatusTimeout: - item.Status = gen.CronMutationResultStatusTimeout + item.Status = gen.ScheduleMutationResultStatusTimeout e := resp.Error item.Error = &e default: - item.Status = gen.CronMutationResultStatusOk + item.Status = gen.ScheduleMutationResultStatusOk var result cronProv.DeleteResult if resp.Data != nil { _ = json.Unmarshal(resp.Data, &result) @@ -161,7 +161,7 @@ func (s *Schedule) deleteNodeScheduleCronBroadcast( jobUUID := uuid.MustParse(jobID) - return gen.DeleteNodeScheduleCron200JSONResponse{ + return gen.DeleteNodeSchedule200JSONResponse{ JobId: &jobUUID, Results: apiResponses, }, nil diff --git a/internal/controller/api/node/schedule/cron_delete_public_test.go b/internal/controller/api/node/schedule/delete_public_test.go similarity index 81% rename from internal/controller/api/node/schedule/cron_delete_public_test.go rename to internal/controller/api/node/schedule/delete_public_test.go index 54b757325..ae33a724e 100644 --- a/internal/controller/api/node/schedule/cron_delete_public_test.go +++ b/internal/controller/api/node/schedule/delete_public_test.go @@ -46,7 +46,7 @@ import ( "github.com/osapi-io/osapi/internal/validation" ) -type CronDeletePublicTestSuite struct { +type ScheduleDeletePublicTestSuite struct { suite.Suite mockCtrl *gomock.Controller @@ -57,7 +57,7 @@ type CronDeletePublicTestSuite struct { logger *slog.Logger } -func (s *CronDeletePublicTestSuite) SetupSuite() { +func (s *ScheduleDeletePublicTestSuite) SetupSuite() { validation.RegisterTargetValidator(func(_ context.Context) ([]validation.AgentTarget, error) { return []validation.AgentTarget{ {Hostname: "server1", Labels: map[string]string{"group": "web"}}, @@ -66,7 +66,7 @@ func (s *CronDeletePublicTestSuite) SetupSuite() { }) } -func (s *CronDeletePublicTestSuite) SetupTest() { +func (s *ScheduleDeletePublicTestSuite) SetupTest() { s.mockCtrl = gomock.NewController(s.T()) s.mockJobClient = jobmocks.NewMockJobClient(s.mockCtrl) s.handler = apischedule.New(slog.Default(), s.mockJobClient) @@ -75,20 +75,20 @@ func (s *CronDeletePublicTestSuite) SetupTest() { s.logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } -func (s *CronDeletePublicTestSuite) TearDownTest() { +func (s *ScheduleDeletePublicTestSuite) TearDownTest() { s.mockCtrl.Finish() } -func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { +func (s *ScheduleDeletePublicTestSuite) TestDeleteNodeSchedule() { tests := []struct { name string - request gen.DeleteNodeScheduleCronRequestObject + request gen.DeleteNodeScheduleRequestObject setupMock func() - validateFunc func(resp gen.DeleteNodeScheduleCronResponseObject) + validateFunc func(resp gen.DeleteNodeScheduleResponseObject) }{ { name: "success", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", }, @@ -112,8 +112,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -125,7 +125,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "success with nil response data", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", }, @@ -149,8 +149,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -160,7 +160,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "broadcast success", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", }, @@ -188,8 +188,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -197,7 +197,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "broadcast with errors", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", }, @@ -225,8 +225,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -234,7 +234,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "broadcast with skipped host", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", }, @@ -255,19 +255,19 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "broadcast with a host that never answered", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", }, @@ -288,19 +288,19 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusTimeout, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusTimeout, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "timeout: agent did not respond") }, }, { name: "broadcast error collecting responses", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", }, @@ -315,20 +315,20 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - _, ok := resp.(gen.DeleteNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + _, ok := resp.(gen.DeleteNodeSchedule500JSONResponse) s.True(ok) }, }, { name: "validation error empty hostname", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "", Name: "backup", }, setupMock: func() {}, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "required") @@ -336,7 +336,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "not found error", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "nonexistent", }, @@ -351,8 +351,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { ). Return("", nil, fmt.Errorf("cron entry not found: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron404JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "not found") @@ -360,7 +360,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "does not exist error", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "missing", }, @@ -375,8 +375,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { ). Return("", nil, fmt.Errorf("cron entry does not exist: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron404JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "does not exist") @@ -384,7 +384,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { }, { name: "when job skipped", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", }, @@ -407,20 +407,20 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - r, ok := resp.(gen.DeleteNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + r, ok := resp.(gen.DeleteNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) s.Equal("server1", r.Results[0].Hostname) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "job client error", - request: gen.DeleteNodeScheduleCronRequestObject{ + request: gen.DeleteNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", }, @@ -435,8 +435,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.DeleteNodeScheduleCronResponseObject) { - _, ok := resp.(gen.DeleteNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.DeleteNodeScheduleResponseObject) { + _, ok := resp.(gen.DeleteNodeSchedule500JSONResponse) s.True(ok) }, }, @@ -446,14 +446,14 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCron() { s.Run(tt.name, func() { tt.setupMock() - resp, err := s.handler.DeleteNodeScheduleCron(s.ctx, tt.request) + resp, err := s.handler.DeleteNodeSchedule(s.ctx, tt.request) s.NoError(err) tt.validateFunc(resp) }) } } -func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronValidationHTTP() { +func (s *ScheduleDeletePublicTestSuite) TestDeleteNodeScheduleValidationHTTP() { tests := []struct { name string path string @@ -462,7 +462,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronValidationHTTP() { }{ { name: "when valid request", - path: "/api/node/server1/schedule/cron/backup", + path: "/api/node/server1/schedule/backup", setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) mock.EXPECT(). @@ -487,7 +487,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronValidationHTTP() { }, { name: "when target agent not found", - path: "/api/node/nonexistent/schedule/cron/backup", + path: "/api/node/nonexistent/schedule/backup", setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) }, @@ -521,7 +521,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronValidationHTTP() { const rbacCronDeleteTestSigningKey = "test-signing-key-for-rbac-cron-delete" -func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronRBACHTTP() { +func (s *ScheduleDeletePublicTestSuite) TestDeleteNodeScheduleRBACHTTP() { tokenManager := authtoken.New(s.logger) tests := []struct { @@ -550,7 +550,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronRBACHTTP() { rbacCronDeleteTestSigningKey, []string{"read"}, "test-user", - []string{"cron:read"}, + []string{"schedule:read"}, ) s.Require().NoError(err) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) @@ -624,7 +624,7 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronRBACHTTP() { req := httptest.NewRequest( http.MethodDelete, - "/api/node/server1/schedule/cron/backup", + "/api/node/server1/schedule/backup", nil, ) tc.setupAuth(req) @@ -637,8 +637,8 @@ func (s *CronDeletePublicTestSuite) TestDeleteNodeScheduleCronRBACHTTP() { } } -func TestCronDeletePublicTestSuite( +func TestScheduleDeletePublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronDeletePublicTestSuite)) + suite.Run(t, new(ScheduleDeletePublicTestSuite)) } diff --git a/internal/controller/api/node/schedule/gen/api.yaml b/internal/controller/api/node/schedule/gen/api.yaml index b2a5dd97b..b9388c1ca 100644 --- a/internal/controller/api/node/schedule/gen/api.yaml +++ b/internal/controller/api/node/schedule/gen/api.yaml @@ -24,33 +24,33 @@ info: title: Schedule Management API version: 1.0.0 tags: - - name: cron_operations - x-displayName: Node/Schedule/Cron - description: Cron drop-in file management on a target node. + - name: schedule_operations + x-displayName: Node/Schedule + description: Scheduled task management on a target node. paths: # -- Cron collection ------------------------------------------------- - /api/node/{hostname}/schedule/cron: + /api/node/{hostname}/schedule: get: - summary: List all cron entries + summary: List all scheduled entries description: > - List all cron drop-in entries on the target node. + List all scheduled entries on the target node. tags: - - cron_operations - operationId: GetNodeScheduleCron + - schedule_operations + operationId: GetNodeSchedule security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' responses: '200': - description: List of cron entries. + description: List of scheduled entries. content: application/json: schema: - $ref: '#/components/schemas/CronCollectionResponse' + $ref: '#/components/schemas/ScheduleCollectionResponse' '400': description: Bad request - validation error. content: @@ -70,38 +70,38 @@ paths: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '500': - description: Error listing cron entries. + description: Error listing scheduled entries. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' post: - summary: Create a cron entry + summary: Create a scheduled entry description: > - Create a new cron drop-in entry on the target node. + Create a new scheduled entry on the target node. tags: - - cron_operations - operationId: PostNodeScheduleCron + - schedule_operations + operationId: PostNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' requestBody: - description: Cron entry creation parameters. + description: Scheduled entry creation parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronCreateRequest' + $ref: '#/components/schemas/ScheduleCreateRequest' responses: '200': - description: Cron entry created. + description: Scheduled entry created. content: application/json: schema: - $ref: '#/components/schemas/CronCreateResponse' + $ref: '#/components/schemas/ScheduleCreateResponse' '400': description: Invalid request payload. content: @@ -121,7 +121,7 @@ paths: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '500': - description: Error creating cron entry. + description: Error creating scheduled entry. content: application/json: schema: @@ -129,27 +129,27 @@ paths: # -- Cron individual entry ------------------------------------------- - /api/node/{hostname}/schedule/cron/{name}: + /api/node/{hostname}/schedule/{name}: get: - summary: Get a cron entry + summary: Get a scheduled entry description: > - Get a specific cron drop-in entry by name on the target node. + Get a specific scheduled entry by name on the target node. tags: - - cron_operations - operationId: GetNodeScheduleCronByName + - schedule_operations + operationId: GetNodeScheduleByName security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry detail. + description: Scheduled entry detail. content: application/json: schema: - $ref: '#/components/schemas/CronGetResponse' + $ref: '#/components/schemas/ScheduleGetResponse' '400': description: Bad request - validation error. content: @@ -169,45 +169,45 @@ paths: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '500': - description: Error retrieving cron entry. + description: Error retrieving scheduled entry. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' put: - summary: Update a cron entry + summary: Update a scheduled entry description: > - Update an existing cron drop-in entry on the target node. + Update an existing scheduled entry on the target node. tags: - - cron_operations - operationId: PutNodeScheduleCron + - schedule_operations + operationId: PutNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' requestBody: - description: Cron entry update parameters. + description: Scheduled entry update parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronUpdateRequest' + $ref: '#/components/schemas/ScheduleUpdateRequest' responses: '200': - description: Cron entry updated. + description: Scheduled entry updated. content: application/json: schema: - $ref: '#/components/schemas/CronUpdateResponse' + $ref: '#/components/schemas/ScheduleUpdateResponse' '400': description: Invalid request payload. content: @@ -227,38 +227,38 @@ paths: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '500': - description: Error updating cron entry. + description: Error updating scheduled entry. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' delete: - summary: Delete a cron entry + summary: Delete a scheduled entry description: > - Delete a cron drop-in entry from the target node. + Delete a scheduled entry from the target node. tags: - - cron_operations - operationId: DeleteNodeScheduleCron + - schedule_operations + operationId: DeleteNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry deleted. + description: Scheduled entry deleted. content: application/json: schema: - $ref: '#/components/schemas/CronDeleteResponse' + $ref: '#/components/schemas/ScheduleDeleteResponse' '400': description: Bad request - validation error. content: @@ -278,13 +278,13 @@ paths: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '../../../common/gen/api.yaml#/components/schemas/ErrorResponse' '500': - description: Error deleting cron entry. + description: Error deleting scheduled entry. content: application/json: schema: @@ -310,12 +310,12 @@ components: type: string minLength: 1 - CronName: + ScheduleName: name: name in: path required: true description: > - Cron entry name. Must contain only alphanumeric characters, + Scheduled entry name. Must contain only alphanumeric characters, underscores, and hyphens. # NOTE: x-oapi-codegen-extra-tags on path params do not generate # validate tags in strict-server mode. Validation is handled @@ -339,7 +339,7 @@ components: # -- Request schemas ------------------------------------------------- - CronCreateRequest: + ScheduleCreateRequest: type: object required: - name @@ -348,7 +348,7 @@ components: name: type: string description: > - Name for the cron drop-in entry. Used as the file name + Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. x-oapi-codegen-extra-tags: validate: "required,min=1,max=64" @@ -356,7 +356,7 @@ components: type: string description: > Name of the uploaded file in the object store to deploy - as the cron entry content. + as the scheduled entry content. x-oapi-codegen-extra-tags: validate: "required,min=1" schedule: @@ -402,7 +402,7 @@ components: Template variables. Only used when content_type is "template". - CronUpdateRequest: + ScheduleUpdateRequest: type: object properties: object: @@ -437,9 +437,9 @@ components: # -- Response schemas ------------------------------------------------ - CronEntry: + ScheduleEntry: type: object - description: A cron drop-in entry. + description: A scheduled entry. properties: hostname: type: string @@ -450,7 +450,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. object: type: string description: Object store name for the deployed content. @@ -475,7 +475,7 @@ components: "weekly", or "monthly". user: type: string - description: User the cron entry runs as. + description: User the scheduled entry runs as. error: type: string description: Error message if the agent failed to retrieve this entry. @@ -483,7 +483,7 @@ components: - hostname - status - CronCollectionResponse: + ScheduleCollectionResponse: type: object properties: job_id: @@ -494,13 +494,13 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronGetResponse: + ScheduleGetResponse: type: object - description: Collection response for a single cron entry get operation. + description: Collection response for a single scheduled entry get operation. properties: job_id: type: string @@ -510,11 +510,11 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronMutationResult: + ScheduleMutationResult: type: object description: Result of a cron create, update, or delete operation for one host. properties: @@ -527,7 +527,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. changed: type: boolean description: Whether the operation modified system state. @@ -538,7 +538,7 @@ components: - hostname - status - CronCreateResponse: + ScheduleCreateResponse: type: object properties: job_id: @@ -549,11 +549,11 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronUpdateResponse: + ScheduleUpdateResponse: type: object properties: job_id: @@ -564,11 +564,11 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronDeleteResponse: + ScheduleDeleteResponse: type: object properties: job_id: @@ -579,6 +579,6 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results diff --git a/internal/controller/api/node/schedule/gen/schedule.gen.go b/internal/controller/api/node/schedule/gen/schedule.gen.go index 9fa36685f..5ae0f05a7 100644 --- a/internal/controller/api/node/schedule/gen/schedule.gen.go +++ b/internal/controller/api/node/schedule/gen/schedule.gen.go @@ -20,157 +20,160 @@ const ( BearerAuthScopes bearerAuthContextKey = "BearerAuth.Scopes" ) -// Defines values for CronCreateRequestContentType. +// Defines values for ScheduleCreateRequestContentType. const ( - CronCreateRequestContentTypeRaw CronCreateRequestContentType = "raw" - CronCreateRequestContentTypeTemplate CronCreateRequestContentType = "template" + ScheduleCreateRequestContentTypeRaw ScheduleCreateRequestContentType = "raw" + ScheduleCreateRequestContentTypeTemplate ScheduleCreateRequestContentType = "template" ) -// Valid indicates whether the value is a known member of the CronCreateRequestContentType enum. -func (e CronCreateRequestContentType) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleCreateRequestContentType enum. +func (e ScheduleCreateRequestContentType) Valid() bool { switch e { - case CronCreateRequestContentTypeRaw: + case ScheduleCreateRequestContentTypeRaw: return true - case CronCreateRequestContentTypeTemplate: + case ScheduleCreateRequestContentTypeTemplate: return true default: return false } } -// Defines values for CronCreateRequestInterval. +// Defines values for ScheduleCreateRequestInterval. const ( - CronCreateRequestIntervalDaily CronCreateRequestInterval = "daily" - CronCreateRequestIntervalHourly CronCreateRequestInterval = "hourly" - CronCreateRequestIntervalMonthly CronCreateRequestInterval = "monthly" - CronCreateRequestIntervalWeekly CronCreateRequestInterval = "weekly" + ScheduleCreateRequestIntervalDaily ScheduleCreateRequestInterval = "daily" + ScheduleCreateRequestIntervalHourly ScheduleCreateRequestInterval = "hourly" + ScheduleCreateRequestIntervalMonthly ScheduleCreateRequestInterval = "monthly" + ScheduleCreateRequestIntervalWeekly ScheduleCreateRequestInterval = "weekly" ) -// Valid indicates whether the value is a known member of the CronCreateRequestInterval enum. -func (e CronCreateRequestInterval) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleCreateRequestInterval enum. +func (e ScheduleCreateRequestInterval) Valid() bool { switch e { - case CronCreateRequestIntervalDaily: + case ScheduleCreateRequestIntervalDaily: return true - case CronCreateRequestIntervalHourly: + case ScheduleCreateRequestIntervalHourly: return true - case CronCreateRequestIntervalMonthly: + case ScheduleCreateRequestIntervalMonthly: return true - case CronCreateRequestIntervalWeekly: + case ScheduleCreateRequestIntervalWeekly: return true default: return false } } -// Defines values for CronEntryInterval. +// Defines values for ScheduleEntryInterval. const ( - CronEntryIntervalDaily CronEntryInterval = "daily" - CronEntryIntervalHourly CronEntryInterval = "hourly" - CronEntryIntervalMonthly CronEntryInterval = "monthly" - CronEntryIntervalWeekly CronEntryInterval = "weekly" + ScheduleEntryIntervalDaily ScheduleEntryInterval = "daily" + ScheduleEntryIntervalHourly ScheduleEntryInterval = "hourly" + ScheduleEntryIntervalMonthly ScheduleEntryInterval = "monthly" + ScheduleEntryIntervalWeekly ScheduleEntryInterval = "weekly" ) -// Valid indicates whether the value is a known member of the CronEntryInterval enum. -func (e CronEntryInterval) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleEntryInterval enum. +func (e ScheduleEntryInterval) Valid() bool { switch e { - case CronEntryIntervalDaily: + case ScheduleEntryIntervalDaily: return true - case CronEntryIntervalHourly: + case ScheduleEntryIntervalHourly: return true - case CronEntryIntervalMonthly: + case ScheduleEntryIntervalMonthly: return true - case CronEntryIntervalWeekly: + case ScheduleEntryIntervalWeekly: return true default: return false } } -// Defines values for CronEntryStatus. +// Defines values for ScheduleEntryStatus. const ( - CronEntryStatusFailed CronEntryStatus = "failed" - CronEntryStatusOk CronEntryStatus = "ok" - CronEntryStatusSkipped CronEntryStatus = "skipped" - CronEntryStatusTimeout CronEntryStatus = "timeout" + ScheduleEntryStatusFailed ScheduleEntryStatus = "failed" + ScheduleEntryStatusOk ScheduleEntryStatus = "ok" + ScheduleEntryStatusSkipped ScheduleEntryStatus = "skipped" + ScheduleEntryStatusTimeout ScheduleEntryStatus = "timeout" ) -// Valid indicates whether the value is a known member of the CronEntryStatus enum. -func (e CronEntryStatus) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleEntryStatus enum. +func (e ScheduleEntryStatus) Valid() bool { switch e { - case CronEntryStatusFailed: + case ScheduleEntryStatusFailed: return true - case CronEntryStatusOk: + case ScheduleEntryStatusOk: return true - case CronEntryStatusSkipped: + case ScheduleEntryStatusSkipped: return true - case CronEntryStatusTimeout: + case ScheduleEntryStatusTimeout: return true default: return false } } -// Defines values for CronMutationResultStatus. +// Defines values for ScheduleMutationResultStatus. const ( - CronMutationResultStatusFailed CronMutationResultStatus = "failed" - CronMutationResultStatusOk CronMutationResultStatus = "ok" - CronMutationResultStatusSkipped CronMutationResultStatus = "skipped" - CronMutationResultStatusTimeout CronMutationResultStatus = "timeout" + ScheduleMutationResultStatusFailed ScheduleMutationResultStatus = "failed" + ScheduleMutationResultStatusOk ScheduleMutationResultStatus = "ok" + ScheduleMutationResultStatusSkipped ScheduleMutationResultStatus = "skipped" + ScheduleMutationResultStatusTimeout ScheduleMutationResultStatus = "timeout" ) -// Valid indicates whether the value is a known member of the CronMutationResultStatus enum. -func (e CronMutationResultStatus) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleMutationResultStatus enum. +func (e ScheduleMutationResultStatus) Valid() bool { switch e { - case CronMutationResultStatusFailed: + case ScheduleMutationResultStatusFailed: return true - case CronMutationResultStatusOk: + case ScheduleMutationResultStatusOk: return true - case CronMutationResultStatusSkipped: + case ScheduleMutationResultStatusSkipped: return true - case CronMutationResultStatusTimeout: + case ScheduleMutationResultStatusTimeout: return true default: return false } } -// Defines values for CronUpdateRequestContentType. +// Defines values for ScheduleUpdateRequestContentType. const ( - CronUpdateRequestContentTypeRaw CronUpdateRequestContentType = "raw" - CronUpdateRequestContentTypeTemplate CronUpdateRequestContentType = "template" + ScheduleUpdateRequestContentTypeRaw ScheduleUpdateRequestContentType = "raw" + ScheduleUpdateRequestContentTypeTemplate ScheduleUpdateRequestContentType = "template" ) -// Valid indicates whether the value is a known member of the CronUpdateRequestContentType enum. -func (e CronUpdateRequestContentType) Valid() bool { +// Valid indicates whether the value is a known member of the ScheduleUpdateRequestContentType enum. +func (e ScheduleUpdateRequestContentType) Valid() bool { switch e { - case CronUpdateRequestContentTypeRaw: + case ScheduleUpdateRequestContentTypeRaw: return true - case CronUpdateRequestContentTypeTemplate: + case ScheduleUpdateRequestContentTypeTemplate: return true default: return false } } -// CronCollectionResponse defines model for CronCollectionResponse. -type CronCollectionResponse struct { +// ErrorResponse defines model for ErrorResponse. +type ErrorResponse = externalRef0.ErrorResponse + +// ScheduleCollectionResponse defines model for ScheduleCollectionResponse. +type ScheduleCollectionResponse struct { // JobId The job ID used to process this request. JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronEntry `json:"results"` + Results []ScheduleEntry `json:"results"` } -// CronCreateRequest defines model for CronCreateRequest. -type CronCreateRequest struct { +// ScheduleCreateRequest defines model for ScheduleCreateRequest. +type ScheduleCreateRequest struct { // ContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. - ContentType *CronCreateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` + ContentType *ScheduleCreateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` // Interval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. - Interval *CronCreateRequestInterval `json:"interval,omitempty" validate:"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"` + Interval *ScheduleCreateRequestInterval `json:"interval,omitempty" validate:"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"` - // Name Name for the cron drop-in entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. + // Name Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. Name string `json:"name" validate:"required,min=1,max=64"` - // Object Name of the uploaded file in the object store to deploy as the cron entry content. + // Object Name of the uploaded file in the object store to deploy as the scheduled entry content. Object string `json:"object" validate:"required,min=1"` // Schedule Cron schedule expression (e.g., "*/5 * * * *"). Mutually exclusive with interval — provide exactly one. @@ -183,28 +186,28 @@ type CronCreateRequest struct { Vars *map[string]interface{} `json:"vars,omitempty"` } -// CronCreateRequestContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. -type CronCreateRequestContentType string +// ScheduleCreateRequestContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. +type ScheduleCreateRequestContentType string -// CronCreateRequestInterval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. -type CronCreateRequestInterval string +// ScheduleCreateRequestInterval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. +type ScheduleCreateRequestInterval string -// CronCreateResponse defines model for CronCreateResponse. -type CronCreateResponse struct { +// ScheduleCreateResponse defines model for ScheduleCreateResponse. +type ScheduleCreateResponse struct { // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` } -// CronDeleteResponse defines model for CronDeleteResponse. -type CronDeleteResponse struct { +// ScheduleDeleteResponse defines model for ScheduleDeleteResponse. +type ScheduleDeleteResponse struct { // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` } -// CronEntry A cron drop-in entry. -type CronEntry struct { +// ScheduleEntry A scheduled entry. +type ScheduleEntry struct { // Error Error message if the agent failed to retrieve this entry. Error *string `json:"error,omitempty"` @@ -212,9 +215,9 @@ type CronEntry struct { Hostname string `json:"hostname"` // Interval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. - Interval *CronEntryInterval `json:"interval,omitempty"` + Interval *ScheduleEntryInterval `json:"interval,omitempty"` - // Name Cron entry name. + // Name Scheduled entry name. Name *string `json:"name,omitempty"` // Object Object store name for the deployed content. @@ -227,27 +230,27 @@ type CronEntry struct { Source *string `json:"source,omitempty"` // Status The status of the operation for this host. - Status CronEntryStatus `json:"status"` + Status ScheduleEntryStatus `json:"status"` - // User User the cron entry runs as. + // User User the scheduled entry runs as. User *string `json:"user,omitempty"` } -// CronEntryInterval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. -type CronEntryInterval string +// ScheduleEntryInterval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. +type ScheduleEntryInterval string -// CronEntryStatus The status of the operation for this host. -type CronEntryStatus string +// ScheduleEntryStatus The status of the operation for this host. +type ScheduleEntryStatus string -// CronGetResponse Collection response for a single cron entry get operation. -type CronGetResponse struct { +// ScheduleGetResponse Collection response for a single scheduled entry get operation. +type ScheduleGetResponse struct { // JobId The job ID used to process this request. JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronEntry `json:"results"` + Results []ScheduleEntry `json:"results"` } -// CronMutationResult Result of a cron create, update, or delete operation for one host. -type CronMutationResult struct { +// ScheduleMutationResult Result of a cron create, update, or delete operation for one host. +type ScheduleMutationResult struct { // Changed Whether the operation modified system state. Changed *bool `json:"changed,omitempty"` @@ -257,20 +260,20 @@ type CronMutationResult struct { // Hostname Hostname of the agent that processed this operation. Hostname string `json:"hostname"` - // Name Cron entry name. + // Name Scheduled entry name. Name *string `json:"name,omitempty"` // Status The status of the operation for this host. - Status CronMutationResultStatus `json:"status"` + Status ScheduleMutationResultStatus `json:"status"` } -// CronMutationResultStatus The status of the operation for this host. -type CronMutationResultStatus string +// ScheduleMutationResultStatus The status of the operation for this host. +type ScheduleMutationResultStatus string -// CronUpdateRequest defines model for CronUpdateRequest. -type CronUpdateRequest struct { +// ScheduleUpdateRequest defines model for ScheduleUpdateRequest. +type ScheduleUpdateRequest struct { // ContentType Content type: "raw" or "template". - ContentType *CronUpdateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` + ContentType *ScheduleUpdateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` // Object New object to deploy (redeploy with updated content). Object *string `json:"object,omitempty" validate:"omitempty,min=1"` @@ -285,51 +288,48 @@ type CronUpdateRequest struct { Vars *map[string]interface{} `json:"vars,omitempty"` } -// CronUpdateRequestContentType Content type: "raw" or "template". -type CronUpdateRequestContentType string +// ScheduleUpdateRequestContentType Content type: "raw" or "template". +type ScheduleUpdateRequestContentType string -// CronUpdateResponse defines model for CronUpdateResponse. -type CronUpdateResponse struct { +// ScheduleUpdateResponse defines model for ScheduleUpdateResponse. +type ScheduleUpdateResponse struct { // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` } -// ErrorResponse defines model for ErrorResponse. -type ErrorResponse = externalRef0.ErrorResponse - -// CronName defines model for CronName. -type CronName = string - // Hostname defines model for Hostname. type Hostname = string +// ScheduleName defines model for ScheduleName. +type ScheduleName = string + // bearerAuthContextKey is the context key for BearerAuth security scheme type bearerAuthContextKey string -// PostNodeScheduleCronJSONRequestBody defines body for PostNodeScheduleCron for application/json ContentType. -type PostNodeScheduleCronJSONRequestBody = CronCreateRequest +// PostNodeScheduleJSONRequestBody defines body for PostNodeSchedule for application/json ContentType. +type PostNodeScheduleJSONRequestBody = ScheduleCreateRequest -// PutNodeScheduleCronJSONRequestBody defines body for PutNodeScheduleCron for application/json ContentType. -type PutNodeScheduleCronJSONRequestBody = CronUpdateRequest +// PutNodeScheduleJSONRequestBody defines body for PutNodeSchedule for application/json ContentType. +type PutNodeScheduleJSONRequestBody = ScheduleUpdateRequest // ServerInterface represents all server handlers. type ServerInterface interface { - // List all cron entries - // (GET /api/node/{hostname}/schedule/cron) - GetNodeScheduleCron(ctx *echo.Context, hostname Hostname) error - // Create a cron entry - // (POST /api/node/{hostname}/schedule/cron) - PostNodeScheduleCron(ctx *echo.Context, hostname Hostname) error - // Delete a cron entry - // (DELETE /api/node/{hostname}/schedule/cron/{name}) - DeleteNodeScheduleCron(ctx *echo.Context, hostname Hostname, name CronName) error - // Get a cron entry - // (GET /api/node/{hostname}/schedule/cron/{name}) - GetNodeScheduleCronByName(ctx *echo.Context, hostname Hostname, name CronName) error - // Update a cron entry - // (PUT /api/node/{hostname}/schedule/cron/{name}) - PutNodeScheduleCron(ctx *echo.Context, hostname Hostname, name CronName) error + // List all scheduled entries + // (GET /api/node/{hostname}/schedule) + GetNodeSchedule(ctx *echo.Context, hostname Hostname) error + // Create a scheduled entry + // (POST /api/node/{hostname}/schedule) + PostNodeSchedule(ctx *echo.Context, hostname Hostname) error + // Delete a scheduled entry + // (DELETE /api/node/{hostname}/schedule/{name}) + DeleteNodeSchedule(ctx *echo.Context, hostname Hostname, name ScheduleName) error + // Get a scheduled entry + // (GET /api/node/{hostname}/schedule/{name}) + GetNodeScheduleByName(ctx *echo.Context, hostname Hostname, name ScheduleName) error + // Update a scheduled entry + // (PUT /api/node/{hostname}/schedule/{name}) + PutNodeSchedule(ctx *echo.Context, hostname Hostname, name ScheduleName) error } // ServerInterfaceWrapper converts echo contexts to parameters. @@ -337,8 +337,8 @@ type ServerInterfaceWrapper struct { Handler ServerInterface } -// GetNodeScheduleCron converts echo context to params. -func (w *ServerInterfaceWrapper) GetNodeScheduleCron(ctx *echo.Context) error { +// GetNodeSchedule converts echo context to params. +func (w *ServerInterfaceWrapper) GetNodeSchedule(ctx *echo.Context) error { var err error // ------------- Path parameter "hostname" ------------- var hostname Hostname @@ -348,15 +348,15 @@ func (w *ServerInterfaceWrapper) GetNodeScheduleCron(ctx *echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter hostname: %s", err)) } - ctx.Set(string(BearerAuthScopes), []string{"cron:read"}) + ctx.Set(string(BearerAuthScopes), []string{"schedule:read"}) // Invoke the callback with all the unmarshaled arguments - err = w.Handler.GetNodeScheduleCron(ctx, hostname) + err = w.Handler.GetNodeSchedule(ctx, hostname) return err } -// PostNodeScheduleCron converts echo context to params. -func (w *ServerInterfaceWrapper) PostNodeScheduleCron(ctx *echo.Context) error { +// PostNodeSchedule converts echo context to params. +func (w *ServerInterfaceWrapper) PostNodeSchedule(ctx *echo.Context) error { var err error // ------------- Path parameter "hostname" ------------- var hostname Hostname @@ -366,15 +366,15 @@ func (w *ServerInterfaceWrapper) PostNodeScheduleCron(ctx *echo.Context) error { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter hostname: %s", err)) } - ctx.Set(string(BearerAuthScopes), []string{"cron:write"}) + ctx.Set(string(BearerAuthScopes), []string{"schedule:write"}) // Invoke the callback with all the unmarshaled arguments - err = w.Handler.PostNodeScheduleCron(ctx, hostname) + err = w.Handler.PostNodeSchedule(ctx, hostname) return err } -// DeleteNodeScheduleCron converts echo context to params. -func (w *ServerInterfaceWrapper) DeleteNodeScheduleCron(ctx *echo.Context) error { +// DeleteNodeSchedule converts echo context to params. +func (w *ServerInterfaceWrapper) DeleteNodeSchedule(ctx *echo.Context) error { var err error // ------------- Path parameter "hostname" ------------- var hostname Hostname @@ -385,22 +385,22 @@ func (w *ServerInterfaceWrapper) DeleteNodeScheduleCron(ctx *echo.Context) error } // ------------- Path parameter "name" ------------- - var name CronName + var name ScheduleName err = runtime.BindStyledParameterWithOptions("simple", "name", ctx.Param("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter name: %s", err)) } - ctx.Set(string(BearerAuthScopes), []string{"cron:write"}) + ctx.Set(string(BearerAuthScopes), []string{"schedule:write"}) // Invoke the callback with all the unmarshaled arguments - err = w.Handler.DeleteNodeScheduleCron(ctx, hostname, name) + err = w.Handler.DeleteNodeSchedule(ctx, hostname, name) return err } -// GetNodeScheduleCronByName converts echo context to params. -func (w *ServerInterfaceWrapper) GetNodeScheduleCronByName(ctx *echo.Context) error { +// GetNodeScheduleByName converts echo context to params. +func (w *ServerInterfaceWrapper) GetNodeScheduleByName(ctx *echo.Context) error { var err error // ------------- Path parameter "hostname" ------------- var hostname Hostname @@ -411,22 +411,22 @@ func (w *ServerInterfaceWrapper) GetNodeScheduleCronByName(ctx *echo.Context) er } // ------------- Path parameter "name" ------------- - var name CronName + var name ScheduleName err = runtime.BindStyledParameterWithOptions("simple", "name", ctx.Param("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter name: %s", err)) } - ctx.Set(string(BearerAuthScopes), []string{"cron:read"}) + ctx.Set(string(BearerAuthScopes), []string{"schedule:read"}) // Invoke the callback with all the unmarshaled arguments - err = w.Handler.GetNodeScheduleCronByName(ctx, hostname, name) + err = w.Handler.GetNodeScheduleByName(ctx, hostname, name) return err } -// PutNodeScheduleCron converts echo context to params. -func (w *ServerInterfaceWrapper) PutNodeScheduleCron(ctx *echo.Context) error { +// PutNodeSchedule converts echo context to params. +func (w *ServerInterfaceWrapper) PutNodeSchedule(ctx *echo.Context) error { var err error // ------------- Path parameter "hostname" ------------- var hostname Hostname @@ -437,17 +437,17 @@ func (w *ServerInterfaceWrapper) PutNodeScheduleCron(ctx *echo.Context) error { } // ------------- Path parameter "name" ------------- - var name CronName + var name ScheduleName err = runtime.BindStyledParameterWithOptions("simple", "name", ctx.Param("name"), &name, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter name: %s", err)) } - ctx.Set(string(BearerAuthScopes), []string{"cron:write"}) + ctx.Set(string(BearerAuthScopes), []string{"schedule:write"}) // Invoke the callback with all the unmarshaled arguments - err = w.Handler.PutNodeScheduleCron(ctx, hostname, name) + err = w.Handler.PutNodeSchedule(ctx, hostname, name) return err } @@ -498,25 +498,25 @@ func RegisterHandlersWithOptions(router EchoRouter, si ServerInterface, options Handler: si, } - router.GET(options.BaseURL+"/api/node/:hostname/schedule/cron", wrapper.GetNodeScheduleCron, options.OperationMiddlewares["GetNodeScheduleCron"]...) - router.POST(options.BaseURL+"/api/node/:hostname/schedule/cron", wrapper.PostNodeScheduleCron, options.OperationMiddlewares["PostNodeScheduleCron"]...) - router.DELETE(options.BaseURL+"/api/node/:hostname/schedule/cron/:name", wrapper.DeleteNodeScheduleCron, options.OperationMiddlewares["DeleteNodeScheduleCron"]...) - router.GET(options.BaseURL+"/api/node/:hostname/schedule/cron/:name", wrapper.GetNodeScheduleCronByName, options.OperationMiddlewares["GetNodeScheduleCronByName"]...) - router.PUT(options.BaseURL+"/api/node/:hostname/schedule/cron/:name", wrapper.PutNodeScheduleCron, options.OperationMiddlewares["PutNodeScheduleCron"]...) + router.GET(options.BaseURL+"/api/node/:hostname/schedule", wrapper.GetNodeSchedule, options.OperationMiddlewares["GetNodeSchedule"]...) + router.POST(options.BaseURL+"/api/node/:hostname/schedule", wrapper.PostNodeSchedule, options.OperationMiddlewares["PostNodeSchedule"]...) + router.DELETE(options.BaseURL+"/api/node/:hostname/schedule/:name", wrapper.DeleteNodeSchedule, options.OperationMiddlewares["DeleteNodeSchedule"]...) + router.GET(options.BaseURL+"/api/node/:hostname/schedule/:name", wrapper.GetNodeScheduleByName, options.OperationMiddlewares["GetNodeScheduleByName"]...) + router.PUT(options.BaseURL+"/api/node/:hostname/schedule/:name", wrapper.PutNodeSchedule, options.OperationMiddlewares["PutNodeSchedule"]...) } -type GetNodeScheduleCronRequestObject struct { +type GetNodeScheduleRequestObject struct { Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` } -type GetNodeScheduleCronResponseObject interface { - VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error +type GetNodeScheduleResponseObject interface { + VisitGetNodeScheduleResponse(w http.ResponseWriter) error } -type GetNodeScheduleCron200JSONResponse CronCollectionResponse +type GetNodeSchedule200JSONResponse ScheduleCollectionResponse -func (response GetNodeScheduleCron200JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response GetNodeSchedule200JSONResponse) VisitGetNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -528,9 +528,9 @@ func (response GetNodeScheduleCron200JSONResponse) VisitGetNodeScheduleCronRespo return err } -type GetNodeScheduleCron400JSONResponse externalRef0.ErrorResponse +type GetNodeSchedule400JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCron400JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response GetNodeSchedule400JSONResponse) VisitGetNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -542,9 +542,9 @@ func (response GetNodeScheduleCron400JSONResponse) VisitGetNodeScheduleCronRespo return err } -type GetNodeScheduleCron401JSONResponse externalRef0.ErrorResponse +type GetNodeSchedule401JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCron401JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response GetNodeSchedule401JSONResponse) VisitGetNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -556,9 +556,9 @@ func (response GetNodeScheduleCron401JSONResponse) VisitGetNodeScheduleCronRespo return err } -type GetNodeScheduleCron403JSONResponse externalRef0.ErrorResponse +type GetNodeSchedule403JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCron403JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response GetNodeSchedule403JSONResponse) VisitGetNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -570,9 +570,9 @@ func (response GetNodeScheduleCron403JSONResponse) VisitGetNodeScheduleCronRespo return err } -type GetNodeScheduleCron500JSONResponse externalRef0.ErrorResponse +type GetNodeSchedule500JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCron500JSONResponse) VisitGetNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response GetNodeSchedule500JSONResponse) VisitGetNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -584,18 +584,18 @@ func (response GetNodeScheduleCron500JSONResponse) VisitGetNodeScheduleCronRespo return err } -type PostNodeScheduleCronRequestObject struct { +type PostNodeScheduleRequestObject struct { Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` - Body *PostNodeScheduleCronJSONRequestBody + Body *PostNodeScheduleJSONRequestBody } -type PostNodeScheduleCronResponseObject interface { - VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error +type PostNodeScheduleResponseObject interface { + VisitPostNodeScheduleResponse(w http.ResponseWriter) error } -type PostNodeScheduleCron200JSONResponse CronCreateResponse +type PostNodeSchedule200JSONResponse ScheduleCreateResponse -func (response PostNodeScheduleCron200JSONResponse) VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PostNodeSchedule200JSONResponse) VisitPostNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -607,9 +607,9 @@ func (response PostNodeScheduleCron200JSONResponse) VisitPostNodeScheduleCronRes return err } -type PostNodeScheduleCron400JSONResponse externalRef0.ErrorResponse +type PostNodeSchedule400JSONResponse externalRef0.ErrorResponse -func (response PostNodeScheduleCron400JSONResponse) VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PostNodeSchedule400JSONResponse) VisitPostNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -621,9 +621,9 @@ func (response PostNodeScheduleCron400JSONResponse) VisitPostNodeScheduleCronRes return err } -type PostNodeScheduleCron401JSONResponse externalRef0.ErrorResponse +type PostNodeSchedule401JSONResponse externalRef0.ErrorResponse -func (response PostNodeScheduleCron401JSONResponse) VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PostNodeSchedule401JSONResponse) VisitPostNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -635,9 +635,9 @@ func (response PostNodeScheduleCron401JSONResponse) VisitPostNodeScheduleCronRes return err } -type PostNodeScheduleCron403JSONResponse externalRef0.ErrorResponse +type PostNodeSchedule403JSONResponse externalRef0.ErrorResponse -func (response PostNodeScheduleCron403JSONResponse) VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PostNodeSchedule403JSONResponse) VisitPostNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -649,9 +649,9 @@ func (response PostNodeScheduleCron403JSONResponse) VisitPostNodeScheduleCronRes return err } -type PostNodeScheduleCron500JSONResponse externalRef0.ErrorResponse +type PostNodeSchedule500JSONResponse externalRef0.ErrorResponse -func (response PostNodeScheduleCron500JSONResponse) VisitPostNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PostNodeSchedule500JSONResponse) VisitPostNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -663,18 +663,18 @@ func (response PostNodeScheduleCron500JSONResponse) VisitPostNodeScheduleCronRes return err } -type DeleteNodeScheduleCronRequestObject struct { - Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` - Name CronName `json:"name" validate:"required,min=1"` +type DeleteNodeScheduleRequestObject struct { + Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` + Name ScheduleName `json:"name" validate:"required,min=1"` } -type DeleteNodeScheduleCronResponseObject interface { - VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error +type DeleteNodeScheduleResponseObject interface { + VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error } -type DeleteNodeScheduleCron200JSONResponse CronDeleteResponse +type DeleteNodeSchedule200JSONResponse ScheduleDeleteResponse -func (response DeleteNodeScheduleCron200JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule200JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -686,9 +686,9 @@ func (response DeleteNodeScheduleCron200JSONResponse) VisitDeleteNodeScheduleCro return err } -type DeleteNodeScheduleCron400JSONResponse externalRef0.ErrorResponse +type DeleteNodeSchedule400JSONResponse externalRef0.ErrorResponse -func (response DeleteNodeScheduleCron400JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule400JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -700,9 +700,9 @@ func (response DeleteNodeScheduleCron400JSONResponse) VisitDeleteNodeScheduleCro return err } -type DeleteNodeScheduleCron401JSONResponse externalRef0.ErrorResponse +type DeleteNodeSchedule401JSONResponse externalRef0.ErrorResponse -func (response DeleteNodeScheduleCron401JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule401JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -714,9 +714,9 @@ func (response DeleteNodeScheduleCron401JSONResponse) VisitDeleteNodeScheduleCro return err } -type DeleteNodeScheduleCron403JSONResponse externalRef0.ErrorResponse +type DeleteNodeSchedule403JSONResponse externalRef0.ErrorResponse -func (response DeleteNodeScheduleCron403JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule403JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -728,9 +728,9 @@ func (response DeleteNodeScheduleCron403JSONResponse) VisitDeleteNodeScheduleCro return err } -type DeleteNodeScheduleCron404JSONResponse externalRef0.ErrorResponse +type DeleteNodeSchedule404JSONResponse externalRef0.ErrorResponse -func (response DeleteNodeScheduleCron404JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule404JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -742,9 +742,9 @@ func (response DeleteNodeScheduleCron404JSONResponse) VisitDeleteNodeScheduleCro return err } -type DeleteNodeScheduleCron500JSONResponse externalRef0.ErrorResponse +type DeleteNodeSchedule500JSONResponse externalRef0.ErrorResponse -func (response DeleteNodeScheduleCron500JSONResponse) VisitDeleteNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response DeleteNodeSchedule500JSONResponse) VisitDeleteNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -756,18 +756,18 @@ func (response DeleteNodeScheduleCron500JSONResponse) VisitDeleteNodeScheduleCro return err } -type GetNodeScheduleCronByNameRequestObject struct { - Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` - Name CronName `json:"name" validate:"required,min=1"` +type GetNodeScheduleByNameRequestObject struct { + Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` + Name ScheduleName `json:"name" validate:"required,min=1"` } -type GetNodeScheduleCronByNameResponseObject interface { - VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error +type GetNodeScheduleByNameResponseObject interface { + VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error } -type GetNodeScheduleCronByName200JSONResponse CronGetResponse +type GetNodeScheduleByName200JSONResponse ScheduleGetResponse -func (response GetNodeScheduleCronByName200JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName200JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -779,9 +779,9 @@ func (response GetNodeScheduleCronByName200JSONResponse) VisitGetNodeScheduleCro return err } -type GetNodeScheduleCronByName400JSONResponse externalRef0.ErrorResponse +type GetNodeScheduleByName400JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCronByName400JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName400JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -793,9 +793,9 @@ func (response GetNodeScheduleCronByName400JSONResponse) VisitGetNodeScheduleCro return err } -type GetNodeScheduleCronByName401JSONResponse externalRef0.ErrorResponse +type GetNodeScheduleByName401JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCronByName401JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName401JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -807,9 +807,9 @@ func (response GetNodeScheduleCronByName401JSONResponse) VisitGetNodeScheduleCro return err } -type GetNodeScheduleCronByName403JSONResponse externalRef0.ErrorResponse +type GetNodeScheduleByName403JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCronByName403JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName403JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -821,9 +821,9 @@ func (response GetNodeScheduleCronByName403JSONResponse) VisitGetNodeScheduleCro return err } -type GetNodeScheduleCronByName404JSONResponse externalRef0.ErrorResponse +type GetNodeScheduleByName404JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCronByName404JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName404JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -835,9 +835,9 @@ func (response GetNodeScheduleCronByName404JSONResponse) VisitGetNodeScheduleCro return err } -type GetNodeScheduleCronByName500JSONResponse externalRef0.ErrorResponse +type GetNodeScheduleByName500JSONResponse externalRef0.ErrorResponse -func (response GetNodeScheduleCronByName500JSONResponse) VisitGetNodeScheduleCronByNameResponse(w http.ResponseWriter) error { +func (response GetNodeScheduleByName500JSONResponse) VisitGetNodeScheduleByNameResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -849,19 +849,19 @@ func (response GetNodeScheduleCronByName500JSONResponse) VisitGetNodeScheduleCro return err } -type PutNodeScheduleCronRequestObject struct { - Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` - Name CronName `json:"name" validate:"required,min=1"` - Body *PutNodeScheduleCronJSONRequestBody +type PutNodeScheduleRequestObject struct { + Hostname Hostname `json:"hostname" validate:"required,min=1,valid_target"` + Name ScheduleName `json:"name" validate:"required,min=1"` + Body *PutNodeScheduleJSONRequestBody } -type PutNodeScheduleCronResponseObject interface { - VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error +type PutNodeScheduleResponseObject interface { + VisitPutNodeScheduleResponse(w http.ResponseWriter) error } -type PutNodeScheduleCron200JSONResponse CronUpdateResponse +type PutNodeSchedule200JSONResponse ScheduleUpdateResponse -func (response PutNodeScheduleCron200JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule200JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -873,9 +873,9 @@ func (response PutNodeScheduleCron200JSONResponse) VisitPutNodeScheduleCronRespo return err } -type PutNodeScheduleCron400JSONResponse externalRef0.ErrorResponse +type PutNodeSchedule400JSONResponse externalRef0.ErrorResponse -func (response PutNodeScheduleCron400JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule400JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -887,9 +887,9 @@ func (response PutNodeScheduleCron400JSONResponse) VisitPutNodeScheduleCronRespo return err } -type PutNodeScheduleCron401JSONResponse externalRef0.ErrorResponse +type PutNodeSchedule401JSONResponse externalRef0.ErrorResponse -func (response PutNodeScheduleCron401JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule401JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -901,9 +901,9 @@ func (response PutNodeScheduleCron401JSONResponse) VisitPutNodeScheduleCronRespo return err } -type PutNodeScheduleCron403JSONResponse externalRef0.ErrorResponse +type PutNodeSchedule403JSONResponse externalRef0.ErrorResponse -func (response PutNodeScheduleCron403JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule403JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -915,9 +915,9 @@ func (response PutNodeScheduleCron403JSONResponse) VisitPutNodeScheduleCronRespo return err } -type PutNodeScheduleCron404JSONResponse externalRef0.ErrorResponse +type PutNodeSchedule404JSONResponse externalRef0.ErrorResponse -func (response PutNodeScheduleCron404JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule404JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -929,9 +929,9 @@ func (response PutNodeScheduleCron404JSONResponse) VisitPutNodeScheduleCronRespo return err } -type PutNodeScheduleCron500JSONResponse externalRef0.ErrorResponse +type PutNodeSchedule500JSONResponse externalRef0.ErrorResponse -func (response PutNodeScheduleCron500JSONResponse) VisitPutNodeScheduleCronResponse(w http.ResponseWriter) error { +func (response PutNodeSchedule500JSONResponse) VisitPutNodeScheduleResponse(w http.ResponseWriter) error { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(response); err != nil { @@ -945,21 +945,21 @@ func (response PutNodeScheduleCron500JSONResponse) VisitPutNodeScheduleCronRespo // StrictServerInterface represents all server handlers. type StrictServerInterface interface { - // List all cron entries - // (GET /api/node/{hostname}/schedule/cron) - GetNodeScheduleCron(ctx context.Context, request GetNodeScheduleCronRequestObject) (GetNodeScheduleCronResponseObject, error) - // Create a cron entry - // (POST /api/node/{hostname}/schedule/cron) - PostNodeScheduleCron(ctx context.Context, request PostNodeScheduleCronRequestObject) (PostNodeScheduleCronResponseObject, error) - // Delete a cron entry - // (DELETE /api/node/{hostname}/schedule/cron/{name}) - DeleteNodeScheduleCron(ctx context.Context, request DeleteNodeScheduleCronRequestObject) (DeleteNodeScheduleCronResponseObject, error) - // Get a cron entry - // (GET /api/node/{hostname}/schedule/cron/{name}) - GetNodeScheduleCronByName(ctx context.Context, request GetNodeScheduleCronByNameRequestObject) (GetNodeScheduleCronByNameResponseObject, error) - // Update a cron entry - // (PUT /api/node/{hostname}/schedule/cron/{name}) - PutNodeScheduleCron(ctx context.Context, request PutNodeScheduleCronRequestObject) (PutNodeScheduleCronResponseObject, error) + // List all scheduled entries + // (GET /api/node/{hostname}/schedule) + GetNodeSchedule(ctx context.Context, request GetNodeScheduleRequestObject) (GetNodeScheduleResponseObject, error) + // Create a scheduled entry + // (POST /api/node/{hostname}/schedule) + PostNodeSchedule(ctx context.Context, request PostNodeScheduleRequestObject) (PostNodeScheduleResponseObject, error) + // Delete a scheduled entry + // (DELETE /api/node/{hostname}/schedule/{name}) + DeleteNodeSchedule(ctx context.Context, request DeleteNodeScheduleRequestObject) (DeleteNodeScheduleResponseObject, error) + // Get a scheduled entry + // (GET /api/node/{hostname}/schedule/{name}) + GetNodeScheduleByName(ctx context.Context, request GetNodeScheduleByNameRequestObject) (GetNodeScheduleByNameResponseObject, error) + // Update a scheduled entry + // (PUT /api/node/{hostname}/schedule/{name}) + PutNodeSchedule(ctx context.Context, request PutNodeScheduleRequestObject) (PutNodeScheduleResponseObject, error) } type StrictHandlerFunc func(ctx *echo.Context, request any) (any, error) @@ -974,140 +974,140 @@ type strictHandler struct { middlewares []StrictMiddlewareFunc } -// GetNodeScheduleCron operation middleware -func (sh *strictHandler) GetNodeScheduleCron(ctx *echo.Context, hostname Hostname) error { - var request GetNodeScheduleCronRequestObject +// GetNodeSchedule operation middleware +func (sh *strictHandler) GetNodeSchedule(ctx *echo.Context, hostname Hostname) error { + var request GetNodeScheduleRequestObject request.Hostname = hostname handler := func(ctx *echo.Context, request interface{}) (interface{}, error) { - return sh.ssi.GetNodeScheduleCron(ctx.Request().Context(), request.(GetNodeScheduleCronRequestObject)) + return sh.ssi.GetNodeSchedule(ctx.Request().Context(), request.(GetNodeScheduleRequestObject)) } for _, middleware := range sh.middlewares { - handler = middleware(handler, "GetNodeScheduleCron") + handler = middleware(handler, "GetNodeSchedule") } response, err := handler(ctx, request) if err != nil { return err - } else if validResponse, ok := response.(GetNodeScheduleCronResponseObject); ok { - return validResponse.VisitGetNodeScheduleCronResponse(ctx.Response()) + } else if validResponse, ok := response.(GetNodeScheduleResponseObject); ok { + return validResponse.VisitGetNodeScheduleResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } -// PostNodeScheduleCron operation middleware -func (sh *strictHandler) PostNodeScheduleCron(ctx *echo.Context, hostname Hostname) error { - var request PostNodeScheduleCronRequestObject +// PostNodeSchedule operation middleware +func (sh *strictHandler) PostNodeSchedule(ctx *echo.Context, hostname Hostname) error { + var request PostNodeScheduleRequestObject request.Hostname = hostname - var body PostNodeScheduleCronJSONRequestBody + var body PostNodeScheduleJSONRequestBody if err := ctx.Bind(&body); err != nil { return err } request.Body = &body handler := func(ctx *echo.Context, request interface{}) (interface{}, error) { - return sh.ssi.PostNodeScheduleCron(ctx.Request().Context(), request.(PostNodeScheduleCronRequestObject)) + return sh.ssi.PostNodeSchedule(ctx.Request().Context(), request.(PostNodeScheduleRequestObject)) } for _, middleware := range sh.middlewares { - handler = middleware(handler, "PostNodeScheduleCron") + handler = middleware(handler, "PostNodeSchedule") } response, err := handler(ctx, request) if err != nil { return err - } else if validResponse, ok := response.(PostNodeScheduleCronResponseObject); ok { - return validResponse.VisitPostNodeScheduleCronResponse(ctx.Response()) + } else if validResponse, ok := response.(PostNodeScheduleResponseObject); ok { + return validResponse.VisitPostNodeScheduleResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } -// DeleteNodeScheduleCron operation middleware -func (sh *strictHandler) DeleteNodeScheduleCron(ctx *echo.Context, hostname Hostname, name CronName) error { - var request DeleteNodeScheduleCronRequestObject +// DeleteNodeSchedule operation middleware +func (sh *strictHandler) DeleteNodeSchedule(ctx *echo.Context, hostname Hostname, name ScheduleName) error { + var request DeleteNodeScheduleRequestObject request.Hostname = hostname request.Name = name handler := func(ctx *echo.Context, request interface{}) (interface{}, error) { - return sh.ssi.DeleteNodeScheduleCron(ctx.Request().Context(), request.(DeleteNodeScheduleCronRequestObject)) + return sh.ssi.DeleteNodeSchedule(ctx.Request().Context(), request.(DeleteNodeScheduleRequestObject)) } for _, middleware := range sh.middlewares { - handler = middleware(handler, "DeleteNodeScheduleCron") + handler = middleware(handler, "DeleteNodeSchedule") } response, err := handler(ctx, request) if err != nil { return err - } else if validResponse, ok := response.(DeleteNodeScheduleCronResponseObject); ok { - return validResponse.VisitDeleteNodeScheduleCronResponse(ctx.Response()) + } else if validResponse, ok := response.(DeleteNodeScheduleResponseObject); ok { + return validResponse.VisitDeleteNodeScheduleResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } -// GetNodeScheduleCronByName operation middleware -func (sh *strictHandler) GetNodeScheduleCronByName(ctx *echo.Context, hostname Hostname, name CronName) error { - var request GetNodeScheduleCronByNameRequestObject +// GetNodeScheduleByName operation middleware +func (sh *strictHandler) GetNodeScheduleByName(ctx *echo.Context, hostname Hostname, name ScheduleName) error { + var request GetNodeScheduleByNameRequestObject request.Hostname = hostname request.Name = name handler := func(ctx *echo.Context, request interface{}) (interface{}, error) { - return sh.ssi.GetNodeScheduleCronByName(ctx.Request().Context(), request.(GetNodeScheduleCronByNameRequestObject)) + return sh.ssi.GetNodeScheduleByName(ctx.Request().Context(), request.(GetNodeScheduleByNameRequestObject)) } for _, middleware := range sh.middlewares { - handler = middleware(handler, "GetNodeScheduleCronByName") + handler = middleware(handler, "GetNodeScheduleByName") } response, err := handler(ctx, request) if err != nil { return err - } else if validResponse, ok := response.(GetNodeScheduleCronByNameResponseObject); ok { - return validResponse.VisitGetNodeScheduleCronByNameResponse(ctx.Response()) + } else if validResponse, ok := response.(GetNodeScheduleByNameResponseObject); ok { + return validResponse.VisitGetNodeScheduleByNameResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } -// PutNodeScheduleCron operation middleware -func (sh *strictHandler) PutNodeScheduleCron(ctx *echo.Context, hostname Hostname, name CronName) error { - var request PutNodeScheduleCronRequestObject +// PutNodeSchedule operation middleware +func (sh *strictHandler) PutNodeSchedule(ctx *echo.Context, hostname Hostname, name ScheduleName) error { + var request PutNodeScheduleRequestObject request.Hostname = hostname request.Name = name - var body PutNodeScheduleCronJSONRequestBody + var body PutNodeScheduleJSONRequestBody if err := ctx.Bind(&body); err != nil { return err } request.Body = &body handler := func(ctx *echo.Context, request interface{}) (interface{}, error) { - return sh.ssi.PutNodeScheduleCron(ctx.Request().Context(), request.(PutNodeScheduleCronRequestObject)) + return sh.ssi.PutNodeSchedule(ctx.Request().Context(), request.(PutNodeScheduleRequestObject)) } for _, middleware := range sh.middlewares { - handler = middleware(handler, "PutNodeScheduleCron") + handler = middleware(handler, "PutNodeSchedule") } response, err := handler(ctx, request) if err != nil { return err - } else if validResponse, ok := response.(PutNodeScheduleCronResponseObject); ok { - return validResponse.VisitPutNodeScheduleCronResponse(ctx.Response()) + } else if validResponse, ok := response.(PutNodeScheduleResponseObject); ok { + return validResponse.VisitPutNodeScheduleResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } diff --git a/internal/controller/api/node/schedule/cron_get.go b/internal/controller/api/node/schedule/get.go similarity index 71% rename from internal/controller/api/node/schedule/cron_get.go rename to internal/controller/api/node/schedule/get.go index 7b3272283..82b757092 100644 --- a/internal/controller/api/node/schedule/cron_get.go +++ b/internal/controller/api/node/schedule/get.go @@ -29,18 +29,18 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/schedule/gen" "github.com/osapi-io/osapi/internal/job" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/controller/api/apierr" ) -// GetNodeScheduleCronByName gets a single cron entry by name on a target node. -func (s *Schedule) GetNodeScheduleCronByName( +// GetNodeScheduleByName gets a single cron entry by name on a target node. +func (s *Schedule) GetNodeScheduleByName( ctx context.Context, - request gen.GetNodeScheduleCronByNameRequestObject, -) (gen.GetNodeScheduleCronByNameResponseObject, error) { + request gen.GetNodeScheduleByNameRequestObject, +) (gen.GetNodeScheduleByNameResponseObject, error) { if errMsg, ok := validateHostname(request.Hostname); !ok { - return gen.GetNodeScheduleCronByName400JSONResponse{Error: &errMsg}, nil + return gen.GetNodeScheduleByName400JSONResponse{Error: &errMsg}, nil } hostname := request.Hostname @@ -54,7 +54,7 @@ func (s *Schedule) GetNodeScheduleCronByName( ) if job.IsBroadcastTarget(hostname) { - return s.getNodeScheduleCronByNameBroadcast(ctx, hostname, name) + return s.getNodeScheduleByNameBroadcast(ctx, hostname, name) } jobID, resp, err := s.JobClient.Query( @@ -67,20 +67,20 @@ func (s *Schedule) GetNodeScheduleCronByName( if err != nil { errMsg := err.Error() if apierr.IsMissing(err) { - return gen.GetNodeScheduleCronByName404JSONResponse{Error: &errMsg}, nil + return gen.GetNodeScheduleByName404JSONResponse{Error: &errMsg}, nil } - return gen.GetNodeScheduleCronByName500JSONResponse{Error: &errMsg}, nil + return gen.GetNodeScheduleByName500JSONResponse{Error: &errMsg}, nil } if resp.Status == job.StatusSkipped { e := resp.Error jobUUID := uuid.MustParse(jobID) - return gen.GetNodeScheduleCronByName200JSONResponse{ + return gen.GetNodeScheduleByName200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronEntry{ + Results: []gen.ScheduleEntry{ { Hostname: resp.Hostname, - Status: gen.CronEntryStatusSkipped, + Status: gen.ScheduleEntryStatusSkipped, Error: &e, }, }, @@ -99,12 +99,12 @@ func (s *Schedule) GetNodeScheduleCronByName( user := entry.User agentHostname := resp.Hostname - return gen.GetNodeScheduleCronByName200JSONResponse{ + return gen.GetNodeScheduleByName200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronEntry{ + Results: []gen.ScheduleEntry{ { Hostname: agentHostname, - Status: gen.CronEntryStatusOk, + Status: gen.ScheduleEntryStatusOk, Name: &entryName, Object: &object, Schedule: &schedule, @@ -114,12 +114,12 @@ func (s *Schedule) GetNodeScheduleCronByName( }, nil } -// getNodeScheduleCronByNameBroadcast handles broadcast targets for cron get. -func (s *Schedule) getNodeScheduleCronByNameBroadcast( +// getNodeScheduleByNameBroadcast handles broadcast targets for cron get. +func (s *Schedule) getNodeScheduleByNameBroadcast( ctx context.Context, target string, name string, -) (gen.GetNodeScheduleCronByNameResponseObject, error) { +) (gen.GetNodeScheduleByNameResponseObject, error) { jobID, responses, err := s.JobClient.QueryBroadcast( ctx, target, @@ -129,29 +129,29 @@ func (s *Schedule) getNodeScheduleCronByNameBroadcast( ) if err != nil { errMsg := err.Error() - return gen.GetNodeScheduleCronByName500JSONResponse{Error: &errMsg}, nil + return gen.GetNodeScheduleByName500JSONResponse{Error: &errMsg}, nil } - allResults := make([]gen.CronEntry, 0) + allResults := make([]gen.ScheduleEntry, 0) for host, resp := range responses { - item := gen.CronEntry{ + item := gen.ScheduleEntry{ Hostname: host, } switch resp.Status { case job.StatusFailed: - item.Status = gen.CronEntryStatusFailed + item.Status = gen.ScheduleEntryStatusFailed e := resp.Error item.Error = &e case job.StatusSkipped: - item.Status = gen.CronEntryStatusSkipped + item.Status = gen.ScheduleEntryStatusSkipped e := resp.Error item.Error = &e case job.StatusTimeout: - item.Status = gen.CronEntryStatusTimeout + item.Status = gen.ScheduleEntryStatusTimeout e := resp.Error item.Error = &e default: - item.Status = gen.CronEntryStatusOk + item.Status = gen.ScheduleEntryStatusOk var entry cronProv.Entry if resp.Data != nil { _ = json.Unmarshal(resp.Data, &entry) @@ -170,7 +170,7 @@ func (s *Schedule) getNodeScheduleCronByNameBroadcast( jobUUID := uuid.MustParse(jobID) - return gen.GetNodeScheduleCronByName200JSONResponse{ + return gen.GetNodeScheduleByName200JSONResponse{ JobId: &jobUUID, Results: allResults, }, nil diff --git a/internal/controller/api/node/schedule/cron_get_public_test.go b/internal/controller/api/node/schedule/get_public_test.go similarity index 81% rename from internal/controller/api/node/schedule/cron_get_public_test.go rename to internal/controller/api/node/schedule/get_public_test.go index 6da6d0901..3bbf97c35 100644 --- a/internal/controller/api/node/schedule/cron_get_public_test.go +++ b/internal/controller/api/node/schedule/get_public_test.go @@ -44,7 +44,7 @@ import ( "github.com/osapi-io/osapi/internal/validation" ) -type CronGetPublicTestSuite struct { +type ScheduleGetPublicTestSuite struct { suite.Suite mockCtrl *gomock.Controller @@ -55,7 +55,7 @@ type CronGetPublicTestSuite struct { logger *slog.Logger } -func (s *CronGetPublicTestSuite) SetupSuite() { +func (s *ScheduleGetPublicTestSuite) SetupSuite() { validation.RegisterTargetValidator(func(_ context.Context) ([]validation.AgentTarget, error) { return []validation.AgentTarget{ {Hostname: "server1", Labels: map[string]string{"group": "web"}}, @@ -64,7 +64,7 @@ func (s *CronGetPublicTestSuite) SetupSuite() { }) } -func (s *CronGetPublicTestSuite) SetupTest() { +func (s *ScheduleGetPublicTestSuite) SetupTest() { s.mockCtrl = gomock.NewController(s.T()) s.mockJobClient = jobmocks.NewMockJobClient(s.mockCtrl) s.handler = apischedule.New(slog.Default(), s.mockJobClient) @@ -73,20 +73,20 @@ func (s *CronGetPublicTestSuite) SetupTest() { s.logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } -func (s *CronGetPublicTestSuite) TearDownTest() { +func (s *ScheduleGetPublicTestSuite) TearDownTest() { s.mockCtrl.Finish() } -func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { +func (s *ScheduleGetPublicTestSuite) TestGetNodeScheduleByName() { tests := []struct { name string - request gen.GetNodeScheduleCronByNameRequestObject + request gen.GetNodeScheduleByNameRequestObject setupMock func() - validateFunc func(resp gen.GetNodeScheduleCronByNameResponseObject) + validateFunc func(resp gen.GetNodeScheduleByNameResponseObject) }{ { name: "success", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "backup", }, @@ -106,8 +106,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ), }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -120,7 +120,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "success with nil response data", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "backup", }, @@ -138,8 +138,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { Data: nil, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -149,7 +149,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "broadcast success", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "_all", Name: "backup", }, @@ -179,8 +179,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -188,7 +188,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "broadcast with error entries", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "_all", Name: "backup", }, @@ -218,8 +218,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -235,7 +235,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "broadcast with skipped host", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "_all", Name: "backup", }, @@ -256,19 +256,19 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronEntryStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleEntryStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "broadcast with a host that never answered", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "_all", Name: "backup", }, @@ -289,19 +289,19 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronEntryStatusTimeout, r.Results[0].Status) + s.Equal(gen.ScheduleEntryStatusTimeout, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "timeout: agent did not respond") }, }, { name: "broadcast error collecting responses", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "_all", Name: "backup", }, @@ -316,20 +316,20 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - _, ok := resp.(gen.GetNodeScheduleCronByName500JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + _, ok := resp.(gen.GetNodeScheduleByName500JSONResponse) s.True(ok) }, }, { name: "validation error empty hostname", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "", Name: "backup", }, setupMock: func() {}, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName400JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "required") @@ -337,7 +337,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "not found error", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "nonexistent", }, @@ -352,8 +352,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ). Return("", nil, fmt.Errorf("cron entry not found: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName404JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "not found") @@ -361,7 +361,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "not managed error", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "unmanaged", }, @@ -376,8 +376,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ). Return("", nil, fmt.Errorf("cron entry not managed: %w", job.ErrNotManaged)) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName404JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "not managed") @@ -385,7 +385,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "does not exist error", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "missing", }, @@ -400,8 +400,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ). Return("", nil, fmt.Errorf("cron entry does not exist: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName404JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "does not exist") @@ -409,7 +409,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { }, { name: "when job skipped", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "backup", }, @@ -432,20 +432,20 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCronByName200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + r, ok := resp.(gen.GetNodeScheduleByName200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) s.Equal("server1", r.Results[0].Hostname) - s.Equal(gen.CronEntryStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleEntryStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "job client error", - request: gen.GetNodeScheduleCronByNameRequestObject{ + request: gen.GetNodeScheduleByNameRequestObject{ Hostname: "server1", Name: "backup", }, @@ -460,8 +460,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.GetNodeScheduleCronByNameResponseObject) { - _, ok := resp.(gen.GetNodeScheduleCronByName500JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleByNameResponseObject) { + _, ok := resp.(gen.GetNodeScheduleByName500JSONResponse) s.True(ok) }, }, @@ -471,14 +471,14 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByName() { s.Run(tt.name, func() { tt.setupMock() - resp, err := s.handler.GetNodeScheduleCronByName(s.ctx, tt.request) + resp, err := s.handler.GetNodeScheduleByName(s.ctx, tt.request) s.NoError(err) tt.validateFunc(resp) }) } } -func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameValidationHTTP() { +func (s *ScheduleGetPublicTestSuite) TestGetNodeScheduleByNameValidationHTTP() { tests := []struct { name string path string @@ -487,7 +487,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameValidationHTTP() { }{ { name: "when valid request", - path: "/api/node/server1/schedule/cron/backup", + path: "/api/node/server1/schedule/backup", setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) mock.EXPECT(). @@ -508,7 +508,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameValidationHTTP() { }, { name: "when target agent not found", - path: "/api/node/nonexistent/schedule/cron/backup", + path: "/api/node/nonexistent/schedule/backup", setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) }, @@ -542,7 +542,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameValidationHTTP() { const rbacCronGetTestSigningKey = "test-signing-key-for-rbac-cron-get" -func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameRBACHTTP() { +func (s *ScheduleGetPublicTestSuite) TestGetNodeScheduleByNameRBACHTTP() { tokenManager := authtoken.New(s.logger) tests := []struct { @@ -571,7 +571,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameRBACHTTP() { rbacCronGetTestSigningKey, []string{"write"}, "test-user", - []string{"cron:write"}, + []string{"schedule:write"}, ) s.Require().NoError(err) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) @@ -641,7 +641,7 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameRBACHTTP() { req := httptest.NewRequest( http.MethodGet, - "/api/node/server1/schedule/cron/backup", + "/api/node/server1/schedule/backup", nil, ) tc.setupAuth(req) @@ -654,8 +654,8 @@ func (s *CronGetPublicTestSuite) TestGetNodeScheduleCronByNameRBACHTTP() { } } -func TestCronGetPublicTestSuite( +func TestScheduleGetPublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronGetPublicTestSuite)) + suite.Run(t, new(ScheduleGetPublicTestSuite)) } diff --git a/internal/controller/api/node/schedule/handler_public_test.go b/internal/controller/api/node/schedule/handler_public_test.go index d38944103..8bbfc87e9 100644 --- a/internal/controller/api/node/schedule/handler_public_test.go +++ b/internal/controller/api/node/schedule/handler_public_test.go @@ -70,7 +70,7 @@ func (s *HandlerPublicTestSuite) TestHandler() { } s.NotEmpty(e.Router().Routes()) - req := httptest.NewRequest(http.MethodGet, "/api/node/hostname/schedule/cron", nil) + req := httptest.NewRequest(http.MethodGet, "/api/node/hostname/schedule", nil) rec := httptest.NewRecorder() e.ServeHTTP(rec, req) }, diff --git a/internal/controller/api/node/schedule/cron_list_get.go b/internal/controller/api/node/schedule/list_get.go similarity index 69% rename from internal/controller/api/node/schedule/cron_list_get.go rename to internal/controller/api/node/schedule/list_get.go index 1c5a5033a..ead81a304 100644 --- a/internal/controller/api/node/schedule/cron_list_get.go +++ b/internal/controller/api/node/schedule/list_get.go @@ -29,16 +29,16 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/schedule/gen" "github.com/osapi-io/osapi/internal/job" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" ) -// GetNodeScheduleCron lists all cron entries on a target node. -func (s *Schedule) GetNodeScheduleCron( +// GetNodeSchedule lists all cron entries on a target node. +func (s *Schedule) GetNodeSchedule( ctx context.Context, - request gen.GetNodeScheduleCronRequestObject, -) (gen.GetNodeScheduleCronResponseObject, error) { + request gen.GetNodeScheduleRequestObject, +) (gen.GetNodeScheduleResponseObject, error) { if errMsg, ok := validateHostname(request.Hostname); !ok { - return gen.GetNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.GetNodeSchedule400JSONResponse{Error: &errMsg}, nil } hostname := request.Hostname @@ -50,24 +50,24 @@ func (s *Schedule) GetNodeScheduleCron( ) if job.IsBroadcastTarget(hostname) { - return s.getNodeScheduleCronBroadcast(ctx, hostname) + return s.getNodeScheduleBroadcast(ctx, hostname) } jobID, resp, err := s.JobClient.Query(ctx, hostname, "schedule", job.OperationCronList, nil) if err != nil { errMsg := err.Error() - return gen.GetNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.GetNodeSchedule500JSONResponse{Error: &errMsg}, nil } if resp.Status == job.StatusSkipped { e := resp.Error jobUUID := uuid.MustParse(jobID) - return gen.GetNodeScheduleCron200JSONResponse{ + return gen.GetNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronEntry{ + Results: []gen.ScheduleEntry{ { Hostname: resp.Hostname, - Status: gen.CronEntryStatusSkipped, + Status: gen.ScheduleEntryStatusSkipped, Error: &e, }, }, @@ -77,17 +77,17 @@ func (s *Schedule) GetNodeScheduleCron( results := responseToCronEntries(resp) jobUUID := uuid.MustParse(jobID) - return gen.GetNodeScheduleCron200JSONResponse{ + return gen.GetNodeSchedule200JSONResponse{ JobId: &jobUUID, Results: results, }, nil } -// getNodeScheduleCronBroadcast handles broadcast targets for cron list. -func (s *Schedule) getNodeScheduleCronBroadcast( +// getNodeScheduleBroadcast handles broadcast targets for cron list. +func (s *Schedule) getNodeScheduleBroadcast( ctx context.Context, target string, -) (gen.GetNodeScheduleCronResponseObject, error) { +) (gen.GetNodeScheduleResponseObject, error) { jobID, responses, err := s.JobClient.QueryBroadcast( ctx, target, @@ -97,34 +97,34 @@ func (s *Schedule) getNodeScheduleCronBroadcast( ) if err != nil { errMsg := err.Error() - return gen.GetNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.GetNodeSchedule500JSONResponse{Error: &errMsg}, nil } - allResults := make([]gen.CronEntry, 0) + allResults := make([]gen.ScheduleEntry, 0) for host, resp := range responses { switch resp.Status { case job.StatusFailed: e := resp.Error h := host - allResults = append(allResults, gen.CronEntry{ + allResults = append(allResults, gen.ScheduleEntry{ Hostname: h, - Status: gen.CronEntryStatusFailed, + Status: gen.ScheduleEntryStatusFailed, Error: &e, }) case job.StatusSkipped: e := resp.Error h := host - allResults = append(allResults, gen.CronEntry{ + allResults = append(allResults, gen.ScheduleEntry{ Hostname: h, - Status: gen.CronEntryStatusSkipped, + Status: gen.ScheduleEntryStatusSkipped, Error: &e, }) case job.StatusTimeout: e := resp.Error h := host - allResults = append(allResults, gen.CronEntry{ + allResults = append(allResults, gen.ScheduleEntry{ Hostname: h, - Status: gen.CronEntryStatusTimeout, + Status: gen.ScheduleEntryStatusTimeout, Error: &e, }) default: @@ -134,16 +134,16 @@ func (s *Schedule) getNodeScheduleCronBroadcast( jobUUID := uuid.MustParse(jobID) - return gen.GetNodeScheduleCron200JSONResponse{ + return gen.GetNodeSchedule200JSONResponse{ JobId: &jobUUID, Results: allResults, }, nil } -// responseToCronEntries converts a job response to gen CronEntry slice. +// responseToCronEntries converts a job response to gen ScheduleEntry slice. func responseToCronEntries( resp *job.Response, -) []gen.CronEntry { +) []gen.ScheduleEntry { var entries []cronProv.Entry if resp.Data != nil { _ = json.Unmarshal(resp.Data, &entries) @@ -151,15 +151,15 @@ func responseToCronEntries( hostname := resp.Hostname - results := make([]gen.CronEntry, 0, len(entries)) + results := make([]gen.ScheduleEntry, 0, len(entries)) for _, e := range entries { name := e.Name object := e.Object source := e.Source - entry := gen.CronEntry{ + entry := gen.ScheduleEntry{ Hostname: hostname, - Status: gen.CronEntryStatusOk, + Status: gen.ScheduleEntryStatusOk, Name: &name, Object: &object, Source: &source, @@ -174,7 +174,7 @@ func responseToCronEntries( entry.User = &user } if e.Interval != "" { - interval := gen.CronEntryInterval(e.Interval) + interval := gen.ScheduleEntryInterval(e.Interval) entry.Interval = &interval } diff --git a/internal/controller/api/node/schedule/cron_list_get_public_test.go b/internal/controller/api/node/schedule/list_get_public_test.go similarity index 83% rename from internal/controller/api/node/schedule/cron_list_get_public_test.go rename to internal/controller/api/node/schedule/list_get_public_test.go index 3d608a3b7..1ba868b6c 100644 --- a/internal/controller/api/node/schedule/cron_list_get_public_test.go +++ b/internal/controller/api/node/schedule/list_get_public_test.go @@ -44,7 +44,7 @@ import ( "github.com/osapi-io/osapi/internal/validation" ) -type CronListGetPublicTestSuite struct { +type ScheduleListGetPublicTestSuite struct { suite.Suite mockCtrl *gomock.Controller @@ -55,7 +55,7 @@ type CronListGetPublicTestSuite struct { logger *slog.Logger } -func (s *CronListGetPublicTestSuite) SetupSuite() { +func (s *ScheduleListGetPublicTestSuite) SetupSuite() { validation.RegisterTargetValidator(func(_ context.Context) ([]validation.AgentTarget, error) { return []validation.AgentTarget{ {Hostname: "server1", Labels: map[string]string{"group": "web"}}, @@ -64,7 +64,7 @@ func (s *CronListGetPublicTestSuite) SetupSuite() { }) } -func (s *CronListGetPublicTestSuite) SetupTest() { +func (s *ScheduleListGetPublicTestSuite) SetupTest() { s.mockCtrl = gomock.NewController(s.T()) s.mockJobClient = jobmocks.NewMockJobClient(s.mockCtrl) s.handler = apischedule.New(slog.Default(), s.mockJobClient) @@ -73,20 +73,20 @@ func (s *CronListGetPublicTestSuite) SetupTest() { s.logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } -func (s *CronListGetPublicTestSuite) TearDownTest() { +func (s *ScheduleListGetPublicTestSuite) TearDownTest() { s.mockCtrl.Finish() } -func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { +func (s *ScheduleListGetPublicTestSuite) TestGetNodeSchedule() { tests := []struct { name string - request gen.GetNodeScheduleCronRequestObject + request gen.GetNodeScheduleRequestObject setupMock func() - validateFunc func(resp gen.GetNodeScheduleCronResponseObject) + validateFunc func(resp gen.GetNodeScheduleResponseObject) }{ { name: "success", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "server1", }, setupMock: func() { @@ -106,8 +106,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { ), }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -119,7 +119,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "success with interval-based entries", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "server1", }, setupMock: func() { @@ -139,8 +139,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { ), }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().Len(r.Results, 2) @@ -148,7 +148,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { s.Equal("logrotate", *r.Results[0].Name) s.Nil(r.Results[0].Schedule) s.Require().NotNil(r.Results[0].Interval) - s.Equal(gen.CronEntryInterval("daily"), *r.Results[0].Interval) + s.Equal(gen.ScheduleEntryInterval("daily"), *r.Results[0].Interval) s.Equal("daily", *r.Results[0].Source) s.Equal("logrotate-script", *r.Results[0].Object) @@ -161,7 +161,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "success with nil response data", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "server1", }, setupMock: func() { @@ -179,8 +179,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { Data: nil, }, nil) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Empty(r.Results) @@ -188,12 +188,12 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "validation error empty hostname", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "", }, setupMock: func() {}, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "required") @@ -201,7 +201,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "when job skipped", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "server1", }, setupMock: func() { @@ -223,20 +223,20 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) s.Equal("server1", r.Results[0].Hostname) - s.Equal(gen.CronEntryStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleEntryStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "job client error", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "server1", }, setupMock: func() { @@ -250,14 +250,14 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - _, ok := resp.(gen.GetNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + _, ok := resp.(gen.GetNodeSchedule500JSONResponse) s.True(ok) }, }, { name: "broadcast target _all with multiple agents", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "_all", }, setupMock: func() { @@ -292,8 +292,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -301,7 +301,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "broadcast target _all includes failed and skipped agents", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "_all", }, setupMock: func() { @@ -338,13 +338,13 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 3) - byHost := make(map[string]*gen.CronEntry) + byHost := make(map[string]*gen.ScheduleEntry) for i := range r.Results { if r.Results[i].Hostname != "" { byHost[r.Results[i].Hostname] = &r.Results[i] @@ -359,13 +359,13 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { s.Contains(*byHost["server2"].Error, "not supported") s.Require().Contains(byHost, "server3") - s.Equal(gen.CronEntryStatusSkipped, byHost["server3"].Status) + s.Equal(gen.ScheduleEntryStatusSkipped, byHost["server3"].Status) s.Contains(*byHost["server3"].Error, "not supported") }, }, { name: "broadcast with a host that never answered", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "_all", }, setupMock: func() { @@ -402,13 +402,13 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 3) - byHost := make(map[string]*gen.CronEntry) + byHost := make(map[string]*gen.ScheduleEntry) for i := range r.Results { if r.Results[i].Hostname != "" { byHost[r.Results[i].Hostname] = &r.Results[i] @@ -423,13 +423,13 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { s.Contains(*byHost["server2"].Error, "timeout: agent did not respond") s.Require().Contains(byHost, "server3") - s.Equal(gen.CronEntryStatusTimeout, byHost["server3"].Status) + s.Equal(gen.ScheduleEntryStatusTimeout, byHost["server3"].Status) s.Contains(*byHost["server3"].Error, "timeout: agent did not respond") }, }, { name: "broadcast target _all with empty responses", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "_all", }, setupMock: func() { @@ -447,8 +447,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - r, ok := resp.(gen.GetNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + r, ok := resp.(gen.GetNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Empty(r.Results) @@ -456,7 +456,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { }, { name: "broadcast job client error", - request: gen.GetNodeScheduleCronRequestObject{ + request: gen.GetNodeScheduleRequestObject{ Hostname: "_all", }, setupMock: func() { @@ -470,8 +470,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.GetNodeScheduleCronResponseObject) { - _, ok := resp.(gen.GetNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.GetNodeScheduleResponseObject) { + _, ok := resp.(gen.GetNodeSchedule500JSONResponse) s.True(ok) }, }, @@ -481,14 +481,14 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCron() { s.Run(tt.name, func() { tt.setupMock() - resp, err := s.handler.GetNodeScheduleCron(s.ctx, tt.request) + resp, err := s.handler.GetNodeSchedule(s.ctx, tt.request) s.NoError(err) tt.validateFunc(resp) }) } } -func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronValidationHTTP() { +func (s *ScheduleListGetPublicTestSuite) TestGetNodeScheduleValidationHTTP() { tests := []struct { name string path string @@ -497,7 +497,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronValidationHTTP() { }{ { name: "when valid request", - path: "/api/node/server1/schedule/cron", + path: "/api/node/server1/schedule", setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) mock.EXPECT(). @@ -516,7 +516,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronValidationHTTP() { }, { name: "when target agent not found", - path: "/api/node/nonexistent/schedule/cron", + path: "/api/node/nonexistent/schedule", setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) }, @@ -550,7 +550,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronValidationHTTP() { const rbacCronListTestSigningKey = "test-signing-key-for-rbac-cron-list" -func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronRBACHTTP() { +func (s *ScheduleListGetPublicTestSuite) TestGetNodeScheduleRBACHTTP() { tokenManager := authtoken.New(s.logger) tests := []struct { @@ -579,7 +579,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronRBACHTTP() { rbacCronListTestSigningKey, []string{"write"}, "test-user", - []string{"cron:write"}, + []string{"schedule:write"}, ) s.Require().NoError(err) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) @@ -647,7 +647,7 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronRBACHTTP() { req := httptest.NewRequest( http.MethodGet, - "/api/node/server1/schedule/cron", + "/api/node/server1/schedule", nil, ) tc.setupAuth(req) @@ -660,8 +660,8 @@ func (s *CronListGetPublicTestSuite) TestGetNodeScheduleCronRBACHTTP() { } } -func TestCronListGetPublicTestSuite( +func TestScheduleListGetPublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronListGetPublicTestSuite)) + suite.Run(t, new(ScheduleListGetPublicTestSuite)) } diff --git a/internal/controller/api/node/schedule/cron_update.go b/internal/controller/api/node/schedule/update.go similarity index 71% rename from internal/controller/api/node/schedule/cron_update.go rename to internal/controller/api/node/schedule/update.go index 004f0ce50..8f7860e7f 100644 --- a/internal/controller/api/node/schedule/cron_update.go +++ b/internal/controller/api/node/schedule/update.go @@ -29,27 +29,27 @@ import ( "github.com/osapi-io/osapi/internal/controller/api/node/schedule/gen" "github.com/osapi-io/osapi/internal/job" - cronProv "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cronProv "github.com/osapi-io/osapi/internal/provider/schedule/cron" "github.com/osapi-io/osapi/internal/validation" "github.com/osapi-io/osapi/internal/controller/api/apierr" ) -// PutNodeScheduleCron updates a cron entry on a target node. -func (s *Schedule) PutNodeScheduleCron( +// PutNodeSchedule updates a cron entry on a target node. +func (s *Schedule) PutNodeSchedule( ctx context.Context, - request gen.PutNodeScheduleCronRequestObject, -) (gen.PutNodeScheduleCronResponseObject, error) { + request gen.PutNodeScheduleRequestObject, +) (gen.PutNodeScheduleResponseObject, error) { if errMsg, ok := validateHostname(request.Hostname); !ok { - return gen.PutNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule400JSONResponse{Error: &errMsg}, nil } if errMsg, ok := validation.Struct(request.Body); !ok { - return gen.PutNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule400JSONResponse{Error: &errMsg}, nil } if errMsg, ok := validation.AtLeastOneField(request.Body); !ok { - return gen.PutNodeScheduleCron400JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule400JSONResponse{Error: &errMsg}, nil } entry := cronProv.Entry{ @@ -81,7 +81,7 @@ func (s *Schedule) PutNodeScheduleCron( ) if job.IsBroadcastTarget(hostname) { - return s.putNodeScheduleCronUpdateBroadcast(ctx, hostname, entry) + return s.putNodeScheduleUpdateBroadcast(ctx, hostname, entry) } jobID, resp, err := s.JobClient.Modify( @@ -94,20 +94,20 @@ func (s *Schedule) PutNodeScheduleCron( if err != nil { errMsg := err.Error() if apierr.IsMissing(err) { - return gen.PutNodeScheduleCron404JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule404JSONResponse{Error: &errMsg}, nil } - return gen.PutNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule500JSONResponse{Error: &errMsg}, nil } if resp.Status == job.StatusSkipped { jobUUID := uuid.MustParse(jobID) e := resp.Error - return gen.PutNodeScheduleCron200JSONResponse{ + return gen.PutNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: resp.Hostname, - Status: gen.CronMutationResultStatusSkipped, + Status: gen.ScheduleMutationResultStatusSkipped, Error: &e, }, }, @@ -124,12 +124,12 @@ func (s *Schedule) PutNodeScheduleCron( name := result.Name agentHostname := resp.Hostname - return gen.PutNodeScheduleCron200JSONResponse{ + return gen.PutNodeSchedule200JSONResponse{ JobId: &jobUUID, - Results: []gen.CronMutationResult{ + Results: []gen.ScheduleMutationResult{ { Hostname: agentHostname, - Status: gen.CronMutationResultStatusOk, + Status: gen.ScheduleMutationResultStatusOk, Name: &name, Changed: changed, }, @@ -137,12 +137,12 @@ func (s *Schedule) PutNodeScheduleCron( }, nil } -// putNodeScheduleCronUpdateBroadcast handles broadcast targets for cron update. -func (s *Schedule) putNodeScheduleCronUpdateBroadcast( +// putNodeScheduleUpdateBroadcast handles broadcast targets for cron update. +func (s *Schedule) putNodeScheduleUpdateBroadcast( ctx context.Context, target string, entry cronProv.Entry, -) (gen.PutNodeScheduleCronResponseObject, error) { +) (gen.PutNodeScheduleResponseObject, error) { jobID, responses, err := s.JobClient.ModifyBroadcast( ctx, target, @@ -152,29 +152,29 @@ func (s *Schedule) putNodeScheduleCronUpdateBroadcast( ) if err != nil { errMsg := err.Error() - return gen.PutNodeScheduleCron500JSONResponse{Error: &errMsg}, nil + return gen.PutNodeSchedule500JSONResponse{Error: &errMsg}, nil } - var apiResponses []gen.CronMutationResult + var apiResponses []gen.ScheduleMutationResult for host, resp := range responses { - item := gen.CronMutationResult{ + item := gen.ScheduleMutationResult{ Hostname: host, } switch resp.Status { case job.StatusFailed: - item.Status = gen.CronMutationResultStatusFailed + item.Status = gen.ScheduleMutationResultStatusFailed e := resp.Error item.Error = &e case job.StatusSkipped: - item.Status = gen.CronMutationResultStatusSkipped + item.Status = gen.ScheduleMutationResultStatusSkipped e := resp.Error item.Error = &e case job.StatusTimeout: - item.Status = gen.CronMutationResultStatusTimeout + item.Status = gen.ScheduleMutationResultStatusTimeout e := resp.Error item.Error = &e default: - item.Status = gen.CronMutationResultStatusOk + item.Status = gen.ScheduleMutationResultStatusOk var result cronProv.UpdateResult if resp.Data != nil { _ = json.Unmarshal(resp.Data, &result) @@ -188,7 +188,7 @@ func (s *Schedule) putNodeScheduleCronUpdateBroadcast( jobUUID := uuid.MustParse(jobID) - return gen.PutNodeScheduleCron200JSONResponse{ + return gen.PutNodeSchedule200JSONResponse{ JobId: &jobUUID, Results: apiResponses, }, nil diff --git a/internal/controller/api/node/schedule/cron_update_public_test.go b/internal/controller/api/node/schedule/update_public_test.go similarity index 79% rename from internal/controller/api/node/schedule/cron_update_public_test.go rename to internal/controller/api/node/schedule/update_public_test.go index 6e9fc5991..3338fcd03 100644 --- a/internal/controller/api/node/schedule/cron_update_public_test.go +++ b/internal/controller/api/node/schedule/update_public_test.go @@ -47,7 +47,7 @@ import ( "github.com/osapi-io/osapi/internal/validation" ) -type CronUpdatePublicTestSuite struct { +type ScheduleUpdatePublicTestSuite struct { suite.Suite mockCtrl *gomock.Controller @@ -58,7 +58,7 @@ type CronUpdatePublicTestSuite struct { logger *slog.Logger } -func (s *CronUpdatePublicTestSuite) SetupSuite() { +func (s *ScheduleUpdatePublicTestSuite) SetupSuite() { validation.RegisterTargetValidator(func(_ context.Context) ([]validation.AgentTarget, error) { return []validation.AgentTarget{ {Hostname: "server1", Labels: map[string]string{"group": "web"}}, @@ -67,7 +67,7 @@ func (s *CronUpdatePublicTestSuite) SetupSuite() { }) } -func (s *CronUpdatePublicTestSuite) SetupTest() { +func (s *ScheduleUpdatePublicTestSuite) SetupTest() { s.mockCtrl = gomock.NewController(s.T()) s.mockJobClient = jobmocks.NewMockJobClient(s.mockCtrl) s.handler = apischedule.New(slog.Default(), s.mockJobClient) @@ -76,27 +76,27 @@ func (s *CronUpdatePublicTestSuite) SetupTest() { s.logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) } -func (s *CronUpdatePublicTestSuite) TearDownTest() { +func (s *ScheduleUpdatePublicTestSuite) TearDownTest() { s.mockCtrl.Finish() } -func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { +func (s *ScheduleUpdatePublicTestSuite) TestPutNodeSchedule() { tests := []struct { name string - request gen.PutNodeScheduleCronRequestObject + request gen.PutNodeScheduleRequestObject setupMock func() - validateFunc func(resp gen.PutNodeScheduleCronResponseObject) + validateFunc func(resp gen.PutNodeScheduleResponseObject) }{ { name: "success with all fields", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), Object: ptr.To("backup-v2-script"), User: ptr.To("admin"), - ContentType: (*gen.CronUpdateRequestContentType)(ptr.To("template")), + ContentType: (*gen.ScheduleUpdateRequestContentType)(ptr.To("template")), Vars: &map[string]interface{}{"region": "us-east"}, }, }, @@ -120,8 +120,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -133,14 +133,14 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "when empty body returns 400", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{}, + Body: &gen.PutNodeScheduleJSONRequestBody{}, }, setupMock: func() {}, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "at least one field") @@ -148,10 +148,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "success with nil response data", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -175,8 +175,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) @@ -185,10 +185,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "broadcast success", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -216,8 +216,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -225,10 +225,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "broadcast with error entries", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -256,8 +256,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Len(r.Results, 2) @@ -273,10 +273,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "broadcast with skipped host", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -297,22 +297,22 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "broadcast with a host that never answered", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -333,22 +333,22 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, }, nil) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) - s.Equal(gen.CronMutationResultStatusTimeout, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusTimeout, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "timeout: agent did not respond") }, }, { name: "broadcast error collecting responses", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "_all", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -363,23 +363,23 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - _, ok := resp.(gen.PutNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + _, ok := resp.(gen.PutNodeSchedule500JSONResponse) s.True(ok) }, }, { name: "body validation error schedule too short", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("short"), }, }, setupMock: func() {}, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "Schedule") @@ -387,16 +387,16 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "validation error empty hostname", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, setupMock: func() {}, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron400JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule400JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "required") @@ -404,10 +404,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "not found error", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "nonexistent", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -422,8 +422,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { ). Return("", nil, fmt.Errorf("cron entry not found: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron404JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "not found") @@ -431,10 +431,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "does not exist error", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "missing", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -449,8 +449,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { ). Return("", nil, fmt.Errorf("cron entry does not exist: %w", job.ErrNotFound)) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron404JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule404JSONResponse) s.True(ok) s.Require().NotNil(r.Error) s.Contains(*r.Error, "does not exist") @@ -458,10 +458,10 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { }, { name: "when job skipped", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -484,23 +484,23 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { nil, ) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - r, ok := resp.(gen.PutNodeScheduleCron200JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + r, ok := resp.(gen.PutNodeSchedule200JSONResponse) s.True(ok) s.Require().NotNil(r.JobId) s.Require().Len(r.Results, 1) s.Equal("server1", r.Results[0].Hostname) - s.Equal(gen.CronMutationResultStatusSkipped, r.Results[0].Status) + s.Equal(gen.ScheduleMutationResultStatusSkipped, r.Results[0].Status) s.Require().NotNil(r.Results[0].Error) s.Contains(*r.Results[0].Error, "not supported") }, }, { name: "job client error", - request: gen.PutNodeScheduleCronRequestObject{ + request: gen.PutNodeScheduleRequestObject{ Hostname: "server1", Name: "backup", - Body: &gen.PutNodeScheduleCronJSONRequestBody{ + Body: &gen.PutNodeScheduleJSONRequestBody{ Schedule: ptr.To("0 3 * * *"), }, }, @@ -515,8 +515,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { ). Return("", nil, assert.AnError) }, - validateFunc: func(resp gen.PutNodeScheduleCronResponseObject) { - _, ok := resp.(gen.PutNodeScheduleCron500JSONResponse) + validateFunc: func(resp gen.PutNodeScheduleResponseObject) { + _, ok := resp.(gen.PutNodeSchedule500JSONResponse) s.True(ok) }, }, @@ -526,14 +526,14 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCron() { s.Run(tt.name, func() { tt.setupMock() - resp, err := s.handler.PutNodeScheduleCron(s.ctx, tt.request) + resp, err := s.handler.PutNodeSchedule(s.ctx, tt.request) s.NoError(err) tt.validateFunc(resp) }) } } -func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { +func (s *ScheduleUpdatePublicTestSuite) TestPutNodeScheduleValidationHTTP() { tests := []struct { name string path string @@ -543,7 +543,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { }{ { name: "when valid request", - path: "/api/node/server1/schedule/cron/backup", + path: "/api/node/server1/schedule/backup", body: `{"schedule":"0 3 * * *"}`, setupJobMock: func() *jobmocks.MockJobClient { mock := jobmocks.NewMockJobClient(s.mockCtrl) @@ -569,7 +569,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { }, { name: "when empty body returns 400", - path: "/api/node/server1/schedule/cron/backup", + path: "/api/node/server1/schedule/backup", body: `{}`, setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) @@ -582,7 +582,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { }, { name: "when invalid cron schedule", - path: "/api/node/server1/schedule/cron/backup", + path: "/api/node/server1/schedule/backup", body: `{"schedule":"not-a-cron"}`, setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) @@ -595,7 +595,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { }, { name: "when target agent not found", - path: "/api/node/nonexistent/schedule/cron/backup", + path: "/api/node/nonexistent/schedule/backup", body: `{"schedule":"0 3 * * *"}`, setupJobMock: func() *jobmocks.MockJobClient { return jobmocks.NewMockJobClient(s.mockCtrl) @@ -635,7 +635,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronValidationHTTP() { const rbacCronUpdateTestSigningKey = "test-signing-key-for-rbac-cron-update" -func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronRBACHTTP() { +func (s *ScheduleUpdatePublicTestSuite) TestPutNodeScheduleRBACHTTP() { tokenManager := authtoken.New(s.logger) tests := []struct { @@ -664,7 +664,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronRBACHTTP() { rbacCronUpdateTestSigningKey, []string{"read"}, "test-user", - []string{"cron:read"}, + []string{"schedule:read"}, ) s.Require().NoError(err) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) @@ -738,7 +738,7 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronRBACHTTP() { req := httptest.NewRequest( http.MethodPut, - "/api/node/server1/schedule/cron/backup", + "/api/node/server1/schedule/backup", strings.NewReader(`{"schedule":"0 3 * * *"}`), ) req.Header.Set("Content-Type", "application/json") @@ -752,8 +752,8 @@ func (s *CronUpdatePublicTestSuite) TestPutNodeScheduleCronRBACHTTP() { } } -func TestCronUpdatePublicTestSuite( +func TestScheduleUpdatePublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronUpdatePublicTestSuite)) + suite.Run(t, new(ScheduleUpdatePublicTestSuite)) } diff --git a/internal/job/types.go b/internal/job/types.go index 364f429f4..3f03cf7f8 100644 --- a/internal/job/types.go +++ b/internal/job/types.go @@ -27,7 +27,7 @@ import ( "github.com/osapi-io/osapi/internal/provider/node/disk" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" "github.com/osapi-io/osapi/pkg/sdk/client" ) @@ -185,11 +185,11 @@ const ( // Schedule/Cron operations. const ( - OperationCronList = client.OpCronList - OperationCronGet = client.OpCronGet - OperationCronCreate = client.OpCronCreate - OperationCronUpdate = client.OpCronUpdate - OperationCronDelete = client.OpCronDelete + OperationCronList = client.OpScheduleList + OperationCronGet = client.OpScheduleGet + OperationCronCreate = client.OpScheduleCreate + OperationCronUpdate = client.OpScheduleUpdate + OperationCronDelete = client.OpScheduleDelete ) // Sysctl operations. @@ -629,7 +629,7 @@ type AgentRegistration struct { // LoadAverages contains the system load averages. LoadAverages *load.Result `json:"load_averages,omitempty"` // MemoryStats contains memory usage information. - MemoryStats *mem.Result `json:"memory_stats,omitempty"` + MemoryStats *memory.Result `json:"memory_stats,omitempty"` // AgentVersion is the version of the agent binary. AgentVersion string `json:"agent_version,omitempty"` // Process holds process-level resource usage. @@ -669,7 +669,7 @@ type AgentInfo struct { // LoadAverages contains the system load averages. LoadAverages *load.Result `json:"load_averages,omitempty"` // MemoryStats contains memory usage information. - MemoryStats *mem.Result `json:"memory_stats,omitempty"` + MemoryStats *memory.Result `json:"memory_stats,omitempty"` // AgentVersion is the version of the agent binary. AgentVersion string `json:"agent_version,omitempty"` // Architecture is the CPU architecture (e.g., x86_64, aarch64). @@ -735,7 +735,7 @@ type NodeStatusResponse struct { // LoadAverages from the load provider LoadAverages *load.Result `json:"load_averages"` // MemoryStats from the memory provider - MemoryStats *mem.Result `json:"memory_stats"` + MemoryStats *memory.Result `json:"memory_stats"` // DiskUsage from the disk provider DiskUsage []disk.Result `json:"disk_usage"` // FieldErrors names the reads that failed, by the field they would have diff --git a/internal/job/types_public_test.go b/internal/job/types_public_test.go index fe592cbba..0c866b643 100644 --- a/internal/job/types_public_test.go +++ b/internal/job/types_public_test.go @@ -30,7 +30,7 @@ import ( "github.com/osapi-io/osapi/internal/job" "github.com/osapi-io/osapi/internal/provider/node/host" "github.com/osapi-io/osapi/internal/provider/node/load" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type TypesPublicTestSuite struct { @@ -225,7 +225,7 @@ func (suite *TypesPublicTestSuite) TestAgentInfoFactsFieldsJSONRoundTrip() { }, Uptime: time.Duration(3600) * time.Second, LoadAverages: &load.Result{Load1: 0.5, Load5: 0.3, Load15: 0.1}, - MemoryStats: &mem.Result{Total: 1024, Free: 512}, + MemoryStats: &memory.Result{Total: 1024, Free: 512}, AgentVersion: "1.0.0", Architecture: "x86_64", KernelVersion: "6.1.0-25-generic", diff --git a/internal/provider/node/mem/darwin.go b/internal/provider/node/memory/darwin.go similarity index 99% rename from internal/provider/node/mem/darwin.go rename to internal/provider/node/memory/darwin.go index 010a989a5..c8cf89c38 100644 --- a/internal/provider/node/mem/darwin.go +++ b/internal/provider/node/memory/darwin.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory import ( "github.com/shirou/gopsutil/v4/mem" diff --git a/internal/provider/node/mem/darwin_get_vm.go b/internal/provider/node/memory/darwin_get_vm.go similarity index 99% rename from internal/provider/node/mem/darwin_get_vm.go rename to internal/provider/node/memory/darwin_get_vm.go index dfaba7415..c2f013a08 100644 --- a/internal/provider/node/mem/darwin_get_vm.go +++ b/internal/provider/node/memory/darwin_get_vm.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory // GetStats retrieves memory statistics of the system. // It returns a Stats struct with total, free, and cached memory in diff --git a/internal/provider/node/mem/darwin_get_vm_public_test.go b/internal/provider/node/memory/darwin_get_vm_public_test.go similarity index 97% rename from internal/provider/node/mem/darwin_get_vm_public_test.go rename to internal/provider/node/memory/darwin_get_vm_public_test.go index 342bd8649..a99c0172d 100644 --- a/internal/provider/node/mem/darwin_get_vm_public_test.go +++ b/internal/provider/node/memory/darwin_get_vm_public_test.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem_test +package memory_test import ( "testing" @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type DarwinGetStatsPublicTestSuite struct { diff --git a/internal/provider/node/mem/debian.go b/internal/provider/node/memory/debian.go similarity index 99% rename from internal/provider/node/mem/debian.go rename to internal/provider/node/memory/debian.go index 4fe8af833..896c93040 100644 --- a/internal/provider/node/mem/debian.go +++ b/internal/provider/node/memory/debian.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory import ( "github.com/shirou/gopsutil/v4/mem" diff --git a/internal/provider/node/mem/debian_get_vm.go b/internal/provider/node/memory/debian_get_vm.go similarity index 99% rename from internal/provider/node/mem/debian_get_vm.go rename to internal/provider/node/memory/debian_get_vm.go index deffcf21d..7c6aef677 100644 --- a/internal/provider/node/mem/debian_get_vm.go +++ b/internal/provider/node/memory/debian_get_vm.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory // GetStats retrieves memory statistics of the system. // It returns a Stats struct with total, free, and cached memory in diff --git a/internal/provider/node/mem/debian_get_vm_public_test.go b/internal/provider/node/memory/debian_get_vm_public_test.go similarity index 97% rename from internal/provider/node/mem/debian_get_vm_public_test.go rename to internal/provider/node/memory/debian_get_vm_public_test.go index b4eb637ec..6d8574b7f 100644 --- a/internal/provider/node/mem/debian_get_vm_public_test.go +++ b/internal/provider/node/memory/debian_get_vm_public_test.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem_test +package memory_test import ( "testing" @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type DebianGetStatsPublicTestSuite struct { diff --git a/internal/provider/node/mem/linux.go b/internal/provider/node/memory/linux.go similarity index 95% rename from internal/provider/node/mem/linux.go rename to internal/provider/node/memory/linux.go index 34610fda9..0ffb8f151 100644 --- a/internal/provider/node/mem/linux.go +++ b/internal/provider/node/memory/linux.go @@ -18,8 +18,8 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// Package mem provides memory usage statistics. -package mem +// Package memory provides memory usage statistics. +package memory import ( "github.com/osapi-io/osapi/internal/provider" diff --git a/internal/provider/node/mem/linux_get_vm.go b/internal/provider/node/memory/linux_get_vm.go similarity index 98% rename from internal/provider/node/mem/linux_get_vm.go rename to internal/provider/node/memory/linux_get_vm.go index 561ab078c..e1aeadae1 100644 --- a/internal/provider/node/mem/linux_get_vm.go +++ b/internal/provider/node/memory/linux_get_vm.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory import ( "github.com/osapi-io/osapi/internal/provider" diff --git a/internal/provider/node/mem/linux_get_vm_public_test.go b/internal/provider/node/memory/linux_get_vm_public_test.go similarity index 96% rename from internal/provider/node/mem/linux_get_vm_public_test.go rename to internal/provider/node/memory/linux_get_vm_public_test.go index 3f1a1954e..1bf0896e7 100644 --- a/internal/provider/node/mem/linux_get_vm_public_test.go +++ b/internal/provider/node/memory/linux_get_vm_public_test.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem_test +package memory_test import ( "testing" @@ -26,7 +26,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/osapi-io/osapi/internal/provider" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) type LinuxGetStatsPublicTestSuite struct { diff --git a/internal/provider/node/mem/mocks/generate.go b/internal/provider/node/memory/mocks/generate.go similarity index 100% rename from internal/provider/node/mem/mocks/generate.go rename to internal/provider/node/memory/mocks/generate.go diff --git a/internal/provider/node/mem/mocks/mocks.go b/internal/provider/node/memory/mocks/mocks.go similarity index 93% rename from internal/provider/node/mem/mocks/mocks.go rename to internal/provider/node/memory/mocks/mocks.go index 84a3bf0fd..8efaad12f 100644 --- a/internal/provider/node/mem/mocks/mocks.go +++ b/internal/provider/node/memory/mocks/mocks.go @@ -23,7 +23,7 @@ package mocks import ( "go.uber.org/mock/gomock" - "github.com/osapi-io/osapi/internal/provider/node/mem" + "github.com/osapi-io/osapi/internal/provider/node/memory" ) // NewPlainMockProvider creates a Mock without defaults. @@ -39,7 +39,7 @@ func NewDefaultMockProvider( ) *MockProvider { mock := NewMockProvider(ctrl) - mock.EXPECT().GetStats().Return(&mem.Result{ + mock.EXPECT().GetStats().Return(&memory.Result{ Total: 8388608, Free: 4194304, Cached: 2097152, diff --git a/internal/provider/node/mem/mocks/types.gen.go b/internal/provider/node/memory/mocks/types.gen.go similarity index 89% rename from internal/provider/node/mem/mocks/types.gen.go rename to internal/provider/node/memory/mocks/types.gen.go index d7595bc37..138c90f91 100644 --- a/internal/provider/node/mem/mocks/types.gen.go +++ b/internal/provider/node/memory/mocks/types.gen.go @@ -12,7 +12,7 @@ package mocks import ( reflect "reflect" - mem "github.com/osapi-io/osapi/internal/provider/node/mem" + memory "github.com/osapi-io/osapi/internal/provider/node/memory" gomock "go.uber.org/mock/gomock" ) @@ -41,10 +41,10 @@ func (m *MockProvider) EXPECT() *MockProviderMockRecorder { } // GetStats mocks base method. -func (m *MockProvider) GetStats() (*mem.Result, error) { +func (m *MockProvider) GetStats() (*memory.Result, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetStats") - ret0, _ := ret[0].(*mem.Result) + ret0, _ := ret[0].(*memory.Result) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/internal/provider/node/mem/types.go b/internal/provider/node/memory/types.go similarity index 99% rename from internal/provider/node/mem/types.go rename to internal/provider/node/memory/types.go index ab851148b..662e57783 100644 --- a/internal/provider/node/mem/types.go +++ b/internal/provider/node/memory/types.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package mem +package memory // Provider implements the methods to interact with various Mem components. type Provider interface { diff --git a/internal/provider/scheduled/cron/darwin.go b/internal/provider/schedule/cron/darwin.go similarity index 100% rename from internal/provider/scheduled/cron/darwin.go rename to internal/provider/schedule/cron/darwin.go diff --git a/internal/provider/scheduled/cron/darwin_public_test.go b/internal/provider/schedule/cron/darwin_public_test.go similarity index 98% rename from internal/provider/scheduled/cron/darwin_public_test.go rename to internal/provider/schedule/cron/darwin_public_test.go index 424a8381e..8f98696f8 100644 --- a/internal/provider/scheduled/cron/darwin_public_test.go +++ b/internal/provider/schedule/cron/darwin_public_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/osapi-io/osapi/internal/provider" - "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + "github.com/osapi-io/osapi/internal/provider/schedule/cron" ) type DarwinPublicTestSuite struct { diff --git a/internal/provider/scheduled/cron/debian.go b/internal/provider/schedule/cron/debian.go similarity index 100% rename from internal/provider/scheduled/cron/debian.go rename to internal/provider/schedule/cron/debian.go diff --git a/internal/provider/scheduled/cron/debian_public_test.go b/internal/provider/schedule/cron/debian_public_test.go similarity index 99% rename from internal/provider/scheduled/cron/debian_public_test.go rename to internal/provider/schedule/cron/debian_public_test.go index 29effefa4..ec206accd 100644 --- a/internal/provider/scheduled/cron/debian_public_test.go +++ b/internal/provider/schedule/cron/debian_public_test.go @@ -37,7 +37,7 @@ import ( jobmocks "github.com/osapi-io/osapi/internal/job/mocks" "github.com/osapi-io/osapi/internal/provider/file" filemocks "github.com/osapi-io/osapi/internal/provider/file/mocks" - "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + "github.com/osapi-io/osapi/internal/provider/schedule/cron" ) const testHostname = "test-host" diff --git a/internal/provider/scheduled/cron/linux.go b/internal/provider/schedule/cron/linux.go similarity index 100% rename from internal/provider/scheduled/cron/linux.go rename to internal/provider/schedule/cron/linux.go diff --git a/internal/provider/scheduled/cron/linux_public_test.go b/internal/provider/schedule/cron/linux_public_test.go similarity index 98% rename from internal/provider/scheduled/cron/linux_public_test.go rename to internal/provider/schedule/cron/linux_public_test.go index 30134895a..49a165c71 100644 --- a/internal/provider/scheduled/cron/linux_public_test.go +++ b/internal/provider/schedule/cron/linux_public_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/osapi-io/osapi/internal/provider" - "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + "github.com/osapi-io/osapi/internal/provider/schedule/cron" ) type LinuxPublicTestSuite struct { diff --git a/internal/provider/scheduled/cron/mocks/generate.go b/internal/provider/schedule/cron/mocks/generate.go similarity index 100% rename from internal/provider/scheduled/cron/mocks/generate.go rename to internal/provider/schedule/cron/mocks/generate.go diff --git a/internal/provider/scheduled/cron/mocks/provider.gen.go b/internal/provider/schedule/cron/mocks/provider.gen.go similarity index 98% rename from internal/provider/scheduled/cron/mocks/provider.gen.go rename to internal/provider/schedule/cron/mocks/provider.gen.go index fcab12277..3746cfb94 100644 --- a/internal/provider/scheduled/cron/mocks/provider.gen.go +++ b/internal/provider/schedule/cron/mocks/provider.gen.go @@ -13,7 +13,7 @@ import ( context "context" reflect "reflect" - cron "github.com/osapi-io/osapi/internal/provider/scheduled/cron" + cron "github.com/osapi-io/osapi/internal/provider/schedule/cron" gomock "go.uber.org/mock/gomock" ) diff --git a/internal/provider/scheduled/cron/types.go b/internal/provider/schedule/cron/types.go similarity index 100% rename from internal/provider/scheduled/cron/types.go rename to internal/provider/schedule/cron/types.go diff --git a/internal/validation/validation_public_test.go b/internal/validation/validation_public_test.go index df502fdf2..51e29496c 100644 --- a/internal/validation/validation_public_test.go +++ b/internal/validation/validation_public_test.go @@ -295,7 +295,7 @@ func (s *ValidationPublicTestSuite) TestIpOrFact() { } } -func (s *ValidationPublicTestSuite) TestCronSchedule() { +func (s *ValidationPublicTestSuite) TestSchedule() { tests := []struct { name string field string diff --git a/pkg/sdk/client/gen/client.gen.go b/pkg/sdk/client/gen/client.gen.go index 4b559e5f0..37601d1ba 100644 --- a/pkg/sdk/client/gen/client.gen.go +++ b/pkg/sdk/client/gen/client.gen.go @@ -154,138 +154,6 @@ func (e CommandResultItemStatus) Valid() bool { } } -// Defines values for CronCreateRequestContentType. -const ( - CronCreateRequestContentTypeRaw CronCreateRequestContentType = "raw" - CronCreateRequestContentTypeTemplate CronCreateRequestContentType = "template" -) - -// Valid indicates whether the value is a known member of the CronCreateRequestContentType enum. -func (e CronCreateRequestContentType) Valid() bool { - switch e { - case CronCreateRequestContentTypeRaw: - return true - case CronCreateRequestContentTypeTemplate: - return true - default: - return false - } -} - -// Defines values for CronCreateRequestInterval. -const ( - CronCreateRequestIntervalDaily CronCreateRequestInterval = "daily" - CronCreateRequestIntervalHourly CronCreateRequestInterval = "hourly" - CronCreateRequestIntervalMonthly CronCreateRequestInterval = "monthly" - CronCreateRequestIntervalWeekly CronCreateRequestInterval = "weekly" -) - -// Valid indicates whether the value is a known member of the CronCreateRequestInterval enum. -func (e CronCreateRequestInterval) Valid() bool { - switch e { - case CronCreateRequestIntervalDaily: - return true - case CronCreateRequestIntervalHourly: - return true - case CronCreateRequestIntervalMonthly: - return true - case CronCreateRequestIntervalWeekly: - return true - default: - return false - } -} - -// Defines values for CronEntryInterval. -const ( - CronEntryIntervalDaily CronEntryInterval = "daily" - CronEntryIntervalHourly CronEntryInterval = "hourly" - CronEntryIntervalMonthly CronEntryInterval = "monthly" - CronEntryIntervalWeekly CronEntryInterval = "weekly" -) - -// Valid indicates whether the value is a known member of the CronEntryInterval enum. -func (e CronEntryInterval) Valid() bool { - switch e { - case CronEntryIntervalDaily: - return true - case CronEntryIntervalHourly: - return true - case CronEntryIntervalMonthly: - return true - case CronEntryIntervalWeekly: - return true - default: - return false - } -} - -// Defines values for CronEntryStatus. -const ( - CronEntryStatusFailed CronEntryStatus = "failed" - CronEntryStatusOk CronEntryStatus = "ok" - CronEntryStatusSkipped CronEntryStatus = "skipped" - CronEntryStatusTimeout CronEntryStatus = "timeout" -) - -// Valid indicates whether the value is a known member of the CronEntryStatus enum. -func (e CronEntryStatus) Valid() bool { - switch e { - case CronEntryStatusFailed: - return true - case CronEntryStatusOk: - return true - case CronEntryStatusSkipped: - return true - case CronEntryStatusTimeout: - return true - default: - return false - } -} - -// Defines values for CronMutationResultStatus. -const ( - CronMutationResultStatusFailed CronMutationResultStatus = "failed" - CronMutationResultStatusOk CronMutationResultStatus = "ok" - CronMutationResultStatusSkipped CronMutationResultStatus = "skipped" - CronMutationResultStatusTimeout CronMutationResultStatus = "timeout" -) - -// Valid indicates whether the value is a known member of the CronMutationResultStatus enum. -func (e CronMutationResultStatus) Valid() bool { - switch e { - case CronMutationResultStatusFailed: - return true - case CronMutationResultStatusOk: - return true - case CronMutationResultStatusSkipped: - return true - case CronMutationResultStatusTimeout: - return true - default: - return false - } -} - -// Defines values for CronUpdateRequestContentType. -const ( - CronUpdateRequestContentTypeRaw CronUpdateRequestContentType = "raw" - CronUpdateRequestContentTypeTemplate CronUpdateRequestContentType = "template" -) - -// Valid indicates whether the value is a known member of the CronUpdateRequestContentType enum. -func (e CronUpdateRequestContentType) Valid() bool { - switch e { - case CronUpdateRequestContentTypeRaw: - return true - case CronUpdateRequestContentTypeTemplate: - return true - default: - return false - } -} - // Defines values for DNSConfigResponseStatus. const ( DNSConfigResponseStatusFailed DNSConfigResponseStatus = "failed" @@ -1312,6 +1180,138 @@ func (e SSHKeyMutationEntryStatus) Valid() bool { } } +// Defines values for ScheduleCreateRequestContentType. +const ( + ScheduleCreateRequestContentTypeRaw ScheduleCreateRequestContentType = "raw" + ScheduleCreateRequestContentTypeTemplate ScheduleCreateRequestContentType = "template" +) + +// Valid indicates whether the value is a known member of the ScheduleCreateRequestContentType enum. +func (e ScheduleCreateRequestContentType) Valid() bool { + switch e { + case ScheduleCreateRequestContentTypeRaw: + return true + case ScheduleCreateRequestContentTypeTemplate: + return true + default: + return false + } +} + +// Defines values for ScheduleCreateRequestInterval. +const ( + ScheduleCreateRequestIntervalDaily ScheduleCreateRequestInterval = "daily" + ScheduleCreateRequestIntervalHourly ScheduleCreateRequestInterval = "hourly" + ScheduleCreateRequestIntervalMonthly ScheduleCreateRequestInterval = "monthly" + ScheduleCreateRequestIntervalWeekly ScheduleCreateRequestInterval = "weekly" +) + +// Valid indicates whether the value is a known member of the ScheduleCreateRequestInterval enum. +func (e ScheduleCreateRequestInterval) Valid() bool { + switch e { + case ScheduleCreateRequestIntervalDaily: + return true + case ScheduleCreateRequestIntervalHourly: + return true + case ScheduleCreateRequestIntervalMonthly: + return true + case ScheduleCreateRequestIntervalWeekly: + return true + default: + return false + } +} + +// Defines values for ScheduleEntryInterval. +const ( + ScheduleEntryIntervalDaily ScheduleEntryInterval = "daily" + ScheduleEntryIntervalHourly ScheduleEntryInterval = "hourly" + ScheduleEntryIntervalMonthly ScheduleEntryInterval = "monthly" + ScheduleEntryIntervalWeekly ScheduleEntryInterval = "weekly" +) + +// Valid indicates whether the value is a known member of the ScheduleEntryInterval enum. +func (e ScheduleEntryInterval) Valid() bool { + switch e { + case ScheduleEntryIntervalDaily: + return true + case ScheduleEntryIntervalHourly: + return true + case ScheduleEntryIntervalMonthly: + return true + case ScheduleEntryIntervalWeekly: + return true + default: + return false + } +} + +// Defines values for ScheduleEntryStatus. +const ( + ScheduleEntryStatusFailed ScheduleEntryStatus = "failed" + ScheduleEntryStatusOk ScheduleEntryStatus = "ok" + ScheduleEntryStatusSkipped ScheduleEntryStatus = "skipped" + ScheduleEntryStatusTimeout ScheduleEntryStatus = "timeout" +) + +// Valid indicates whether the value is a known member of the ScheduleEntryStatus enum. +func (e ScheduleEntryStatus) Valid() bool { + switch e { + case ScheduleEntryStatusFailed: + return true + case ScheduleEntryStatusOk: + return true + case ScheduleEntryStatusSkipped: + return true + case ScheduleEntryStatusTimeout: + return true + default: + return false + } +} + +// Defines values for ScheduleMutationResultStatus. +const ( + ScheduleMutationResultStatusFailed ScheduleMutationResultStatus = "failed" + ScheduleMutationResultStatusOk ScheduleMutationResultStatus = "ok" + ScheduleMutationResultStatusSkipped ScheduleMutationResultStatus = "skipped" + ScheduleMutationResultStatusTimeout ScheduleMutationResultStatus = "timeout" +) + +// Valid indicates whether the value is a known member of the ScheduleMutationResultStatus enum. +func (e ScheduleMutationResultStatus) Valid() bool { + switch e { + case ScheduleMutationResultStatusFailed: + return true + case ScheduleMutationResultStatusOk: + return true + case ScheduleMutationResultStatusSkipped: + return true + case ScheduleMutationResultStatusTimeout: + return true + default: + return false + } +} + +// Defines values for ScheduleUpdateRequestContentType. +const ( + ScheduleUpdateRequestContentTypeRaw ScheduleUpdateRequestContentType = "raw" + ScheduleUpdateRequestContentTypeTemplate ScheduleUpdateRequestContentType = "template" +) + +// Valid indicates whether the value is a known member of the ScheduleUpdateRequestContentType enum. +func (e ScheduleUpdateRequestContentType) Valid() bool { + switch e { + case ScheduleUpdateRequestContentTypeRaw: + return true + case ScheduleUpdateRequestContentTypeTemplate: + return true + default: + return false + } +} + // Defines values for ServiceGetEntryStatus. const ( ServiceGetEntryStatusFailed ServiceGetEntryStatus = "failed" @@ -2020,149 +2020,6 @@ type CreateJobResponse struct { Timestamp *string `json:"timestamp,omitempty"` } -// CronCollectionResponse defines model for CronCollectionResponse. -type CronCollectionResponse struct { - // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronEntry `json:"results"` -} - -// CronCreateRequest defines model for CronCreateRequest. -type CronCreateRequest struct { - // ContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. - ContentType *CronCreateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` - - // Interval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. - Interval *CronCreateRequestInterval `json:"interval,omitempty" validate:"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"` - - // Name Name for the cron drop-in entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. - Name string `json:"name" validate:"required,min=1,max=64"` - - // Object Name of the uploaded file in the object store to deploy as the cron entry content. - Object string `json:"object" validate:"required,min=1"` - - // Schedule Cron schedule expression (e.g., "*/5 * * * *"). Mutually exclusive with interval — provide exactly one. - Schedule *string `json:"schedule,omitempty" validate:"required_without=Interval,excluded_with=Interval,omitempty,cron_schedule"` - - // User User to run the command as. Only applies when using schedule (cron.d entries include a user field). - User *string `json:"user,omitempty"` - - // Vars Template variables. Only used when content_type is "template". - Vars *map[string]interface{} `json:"vars,omitempty"` -} - -// CronCreateRequestContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. -type CronCreateRequestContentType string - -// CronCreateRequestInterval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. -type CronCreateRequestInterval string - -// CronCreateResponse defines model for CronCreateResponse. -type CronCreateResponse struct { - // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` -} - -// CronDeleteResponse defines model for CronDeleteResponse. -type CronDeleteResponse struct { - // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` -} - -// CronEntry A cron drop-in entry. -type CronEntry struct { - // Error Error message if the agent failed to retrieve this entry. - Error *string `json:"error,omitempty"` - - // Hostname Hostname of the agent that reported this entry. - Hostname string `json:"hostname"` - - // Interval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. - Interval *CronEntryInterval `json:"interval,omitempty"` - - // Name Cron entry name. - Name *string `json:"name,omitempty"` - - // Object Object store name for the deployed content. - Object *string `json:"object,omitempty"` - - // Schedule Cron schedule expression. Present for /etc/cron.d/ entries. - Schedule *string `json:"schedule,omitempty"` - - // Source Where the entry lives: "cron.d", "hourly", "daily", "weekly", or "monthly". - Source *string `json:"source,omitempty"` - - // Status The status of the operation for this host. - Status CronEntryStatus `json:"status"` - - // User User the cron entry runs as. - User *string `json:"user,omitempty"` -} - -// CronEntryInterval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. -type CronEntryInterval string - -// CronEntryStatus The status of the operation for this host. -type CronEntryStatus string - -// CronGetResponse Collection response for a single cron entry get operation. -type CronGetResponse struct { - // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronEntry `json:"results"` -} - -// CronMutationResult Result of a cron create, update, or delete operation for one host. -type CronMutationResult struct { - // Changed Whether the operation modified system state. - Changed *bool `json:"changed,omitempty"` - - // Error Error message if the agent failed. - Error *string `json:"error,omitempty"` - - // Hostname Hostname of the agent that processed this operation. - Hostname string `json:"hostname"` - - // Name Cron entry name. - Name *string `json:"name,omitempty"` - - // Status The status of the operation for this host. - Status CronMutationResultStatus `json:"status"` -} - -// CronMutationResultStatus The status of the operation for this host. -type CronMutationResultStatus string - -// CronUpdateRequest defines model for CronUpdateRequest. -type CronUpdateRequest struct { - // ContentType Content type: "raw" or "template". - ContentType *CronUpdateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` - - // Object New object to deploy (redeploy with updated content). - Object *string `json:"object,omitempty" validate:"omitempty,min=1"` - - // Schedule Cron schedule expression (e.g., "*/5 * * * *"). - Schedule *string `json:"schedule,omitempty" validate:"omitempty,cron_schedule"` - - // User User to run the command as. - User *string `json:"user,omitempty"` - - // Vars Template variables. - Vars *map[string]interface{} `json:"vars,omitempty"` -} - -// CronUpdateRequestContentType Content type: "raw" or "template". -type CronUpdateRequestContentType string - -// CronUpdateResponse defines model for CronUpdateResponse. -type CronUpdateResponse struct { - // JobId The job ID used to process this request. - JobId *openapi_types.UUID `json:"job_id,omitempty"` - Results []CronMutationResult `json:"results"` -} - // DNSConfigCollectionResponse defines model for DNSConfigCollectionResponse. type DNSConfigCollectionResponse struct { // JobId The job ID used to process this request. @@ -4110,6 +3967,149 @@ type SSHKeyMutationResponse struct { Results []SSHKeyMutationEntry `json:"results"` } +// ScheduleCollectionResponse defines model for ScheduleCollectionResponse. +type ScheduleCollectionResponse struct { + // JobId The job ID used to process this request. + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleEntry `json:"results"` +} + +// ScheduleCreateRequest defines model for ScheduleCreateRequest. +type ScheduleCreateRequest struct { + // ContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. + ContentType *ScheduleCreateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` + + // Interval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. + Interval *ScheduleCreateRequestInterval `json:"interval,omitempty" validate:"required_without=Schedule,excluded_with=Schedule,omitempty,oneof=hourly daily weekly monthly"` + + // Name Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. + Name string `json:"name" validate:"required,min=1,max=64"` + + // Object Name of the uploaded file in the object store to deploy as the scheduled entry content. + Object string `json:"object" validate:"required,min=1"` + + // Schedule Cron schedule expression (e.g., "*/5 * * * *"). Mutually exclusive with interval — provide exactly one. + Schedule *string `json:"schedule,omitempty" validate:"required_without=Interval,excluded_with=Interval,omitempty,cron_schedule"` + + // User User to run the command as. Only applies when using schedule (cron.d entries include a user field). + User *string `json:"user,omitempty"` + + // Vars Template variables. Only used when content_type is "template". + Vars *map[string]interface{} `json:"vars,omitempty"` +} + +// ScheduleCreateRequestContentType Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. +type ScheduleCreateRequestContentType string + +// ScheduleCreateRequestInterval Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. +type ScheduleCreateRequestInterval string + +// ScheduleCreateResponse defines model for ScheduleCreateResponse. +type ScheduleCreateResponse struct { + // JobId The job ID used to process this request. + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` +} + +// ScheduleDeleteResponse defines model for ScheduleDeleteResponse. +type ScheduleDeleteResponse struct { + // JobId The job ID used to process this request. + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` +} + +// ScheduleEntry A scheduled entry. +type ScheduleEntry struct { + // Error Error message if the agent failed to retrieve this entry. + Error *string `json:"error,omitempty"` + + // Hostname Hostname of the agent that reported this entry. + Hostname string `json:"hostname"` + + // Interval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. + Interval *ScheduleEntryInterval `json:"interval,omitempty"` + + // Name Scheduled entry name. + Name *string `json:"name,omitempty"` + + // Object Object store name for the deployed content. + Object *string `json:"object,omitempty"` + + // Schedule Cron schedule expression. Present for /etc/cron.d/ entries. + Schedule *string `json:"schedule,omitempty"` + + // Source Where the entry lives: "cron.d", "hourly", "daily", "weekly", or "monthly". + Source *string `json:"source,omitempty"` + + // Status The status of the operation for this host. + Status ScheduleEntryStatus `json:"status"` + + // User User the scheduled entry runs as. + User *string `json:"user,omitempty"` +} + +// ScheduleEntryInterval Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. +type ScheduleEntryInterval string + +// ScheduleEntryStatus The status of the operation for this host. +type ScheduleEntryStatus string + +// ScheduleGetResponse Collection response for a single scheduled entry get operation. +type ScheduleGetResponse struct { + // JobId The job ID used to process this request. + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleEntry `json:"results"` +} + +// ScheduleMutationResult Result of a cron create, update, or delete operation for one host. +type ScheduleMutationResult struct { + // Changed Whether the operation modified system state. + Changed *bool `json:"changed,omitempty"` + + // Error Error message if the agent failed. + Error *string `json:"error,omitempty"` + + // Hostname Hostname of the agent that processed this operation. + Hostname string `json:"hostname"` + + // Name Scheduled entry name. + Name *string `json:"name,omitempty"` + + // Status The status of the operation for this host. + Status ScheduleMutationResultStatus `json:"status"` +} + +// ScheduleMutationResultStatus The status of the operation for this host. +type ScheduleMutationResultStatus string + +// ScheduleUpdateRequest defines model for ScheduleUpdateRequest. +type ScheduleUpdateRequest struct { + // ContentType Content type: "raw" or "template". + ContentType *ScheduleUpdateRequestContentType `json:"content_type,omitempty" validate:"omitempty,oneof=raw template"` + + // Object New object to deploy (redeploy with updated content). + Object *string `json:"object,omitempty" validate:"omitempty,min=1"` + + // Schedule Cron schedule expression (e.g., "*/5 * * * *"). + Schedule *string `json:"schedule,omitempty" validate:"omitempty,cron_schedule"` + + // User User to run the command as. + User *string `json:"user,omitempty"` + + // Vars Template variables. + Vars *map[string]interface{} `json:"vars,omitempty"` +} + +// ScheduleUpdateRequestContentType Content type: "raw" or "template". +type ScheduleUpdateRequestContentType string + +// ScheduleUpdateResponse defines model for ScheduleUpdateResponse. +type ScheduleUpdateResponse struct { + // JobId The job ID used to process this request. + JobId *openapi_types.UUID `json:"job_id,omitempty"` + Results []ScheduleMutationResult `json:"results"` +} + // ServiceCreateRequest defines model for ServiceCreateRequest. type ServiceCreateRequest struct { // Name Service unit name. @@ -4656,9 +4656,6 @@ type UserUpdateRequest struct { // CertName defines model for CertName. type CertName = string -// CronName defines model for CronName. -type CronName = string - // DockerId defines model for DockerId. type DockerId = string @@ -4686,6 +4683,9 @@ type RouteInterfaceName = string // SSHKeyFingerprint defines model for SSHKeyFingerprint. type SSHKeyFingerprint = string +// ScheduleName defines model for ScheduleName. +type ScheduleName = string + // ServiceName defines model for ServiceName. type ServiceName = string @@ -4892,11 +4892,11 @@ type PostNodePowerShutdownJSONRequestBody = PowerRequest // PostNodeProcessSignalJSONRequestBody defines body for PostNodeProcessSignal for application/json ContentType. type PostNodeProcessSignalJSONRequestBody = ProcessSignalRequest -// PostNodeScheduleCronJSONRequestBody defines body for PostNodeScheduleCron for application/json ContentType. -type PostNodeScheduleCronJSONRequestBody = CronCreateRequest +// PostNodeScheduleJSONRequestBody defines body for PostNodeSchedule for application/json ContentType. +type PostNodeScheduleJSONRequestBody = ScheduleCreateRequest -// PutNodeScheduleCronJSONRequestBody defines body for PutNodeScheduleCron for application/json ContentType. -type PutNodeScheduleCronJSONRequestBody = CronUpdateRequest +// PutNodeScheduleJSONRequestBody defines body for PutNodeSchedule for application/json ContentType. +type PutNodeScheduleJSONRequestBody = ScheduleUpdateRequest // PostNodeServiceJSONRequestBody defines body for PostNodeService for application/json ContentType. type PostNodeServiceJSONRequestBody = ServiceCreateRequest @@ -5309,24 +5309,24 @@ type ClientInterface interface { PostNodeProcessSignal(ctx context.Context, hostname Hostname, pid Pid, body PostNodeProcessSignalJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) - // GetNodeScheduleCron request - GetNodeScheduleCron(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetNodeSchedule request + GetNodeSchedule(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*http.Response, error) - // PostNodeScheduleCronWithBody request with any body - PostNodeScheduleCronWithBody(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + // PostNodeScheduleWithBody request with any body + PostNodeScheduleWithBody(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) - PostNodeScheduleCron(ctx context.Context, hostname Hostname, body PostNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + PostNodeSchedule(ctx context.Context, hostname Hostname, body PostNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) - // DeleteNodeScheduleCron request - DeleteNodeScheduleCron(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*http.Response, error) + // DeleteNodeSchedule request + DeleteNodeSchedule(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*http.Response, error) - // GetNodeScheduleCronByName request - GetNodeScheduleCronByName(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetNodeScheduleByName request + GetNodeScheduleByName(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*http.Response, error) - // PutNodeScheduleCronWithBody request with any body - PutNodeScheduleCronWithBody(ctx context.Context, hostname Hostname, name CronName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + // PutNodeScheduleWithBody request with any body + PutNodeScheduleWithBody(ctx context.Context, hostname Hostname, name ScheduleName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) - PutNodeScheduleCron(ctx context.Context, hostname Hostname, name CronName, body PutNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + PutNodeSchedule(ctx context.Context, hostname Hostname, name ScheduleName, body PutNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) // GetNodeService request GetNodeService(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -6787,8 +6787,8 @@ func (c *Client) PostNodeProcessSignal(ctx context.Context, hostname Hostname, p return c.Client.Do(req) } -func (c *Client) GetNodeScheduleCron(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetNodeScheduleCronRequest(c.Server, hostname) +func (c *Client) GetNodeSchedule(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetNodeScheduleRequest(c.Server, hostname) if err != nil { return nil, err } @@ -6799,8 +6799,8 @@ func (c *Client) GetNodeScheduleCron(ctx context.Context, hostname Hostname, req return c.Client.Do(req) } -func (c *Client) PostNodeScheduleCronWithBody(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostNodeScheduleCronRequestWithBody(c.Server, hostname, contentType, body) +func (c *Client) PostNodeScheduleWithBody(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostNodeScheduleRequestWithBody(c.Server, hostname, contentType, body) if err != nil { return nil, err } @@ -6811,8 +6811,8 @@ func (c *Client) PostNodeScheduleCronWithBody(ctx context.Context, hostname Host return c.Client.Do(req) } -func (c *Client) PostNodeScheduleCron(ctx context.Context, hostname Hostname, body PostNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPostNodeScheduleCronRequest(c.Server, hostname, body) +func (c *Client) PostNodeSchedule(ctx context.Context, hostname Hostname, body PostNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPostNodeScheduleRequest(c.Server, hostname, body) if err != nil { return nil, err } @@ -6823,8 +6823,8 @@ func (c *Client) PostNodeScheduleCron(ctx context.Context, hostname Hostname, bo return c.Client.Do(req) } -func (c *Client) DeleteNodeScheduleCron(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewDeleteNodeScheduleCronRequest(c.Server, hostname, name) +func (c *Client) DeleteNodeSchedule(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteNodeScheduleRequest(c.Server, hostname, name) if err != nil { return nil, err } @@ -6835,8 +6835,8 @@ func (c *Client) DeleteNodeScheduleCron(ctx context.Context, hostname Hostname, return c.Client.Do(req) } -func (c *Client) GetNodeScheduleCronByName(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetNodeScheduleCronByNameRequest(c.Server, hostname, name) +func (c *Client) GetNodeScheduleByName(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetNodeScheduleByNameRequest(c.Server, hostname, name) if err != nil { return nil, err } @@ -6847,8 +6847,8 @@ func (c *Client) GetNodeScheduleCronByName(ctx context.Context, hostname Hostnam return c.Client.Do(req) } -func (c *Client) PutNodeScheduleCronWithBody(ctx context.Context, hostname Hostname, name CronName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPutNodeScheduleCronRequestWithBody(c.Server, hostname, name, contentType, body) +func (c *Client) PutNodeScheduleWithBody(ctx context.Context, hostname Hostname, name ScheduleName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPutNodeScheduleRequestWithBody(c.Server, hostname, name, contentType, body) if err != nil { return nil, err } @@ -6859,8 +6859,8 @@ func (c *Client) PutNodeScheduleCronWithBody(ctx context.Context, hostname Hostn return c.Client.Do(req) } -func (c *Client) PutNodeScheduleCron(ctx context.Context, hostname Hostname, name CronName, body PutNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewPutNodeScheduleCronRequest(c.Server, hostname, name, body) +func (c *Client) PutNodeSchedule(ctx context.Context, hostname Hostname, name ScheduleName, body PutNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewPutNodeScheduleRequest(c.Server, hostname, name, body) if err != nil { return nil, err } @@ -11001,8 +11001,8 @@ func NewPostNodeProcessSignalRequestWithBody(server string, hostname Hostname, p return req, nil } -// NewGetNodeScheduleCronRequest generates requests for GetNodeScheduleCron -func NewGetNodeScheduleCronRequest(server string, hostname Hostname) (*http.Request, error) { +// NewGetNodeScheduleRequest generates requests for GetNodeSchedule +func NewGetNodeScheduleRequest(server string, hostname Hostname) (*http.Request, error) { var err error var pathParam0 string @@ -11017,7 +11017,7 @@ func NewGetNodeScheduleCronRequest(server string, hostname Hostname) (*http.Requ return nil, err } - operationPath := fmt.Sprintf("/api/node/%s/schedule/cron", pathParam0) + operationPath := fmt.Sprintf("/api/node/%s/schedule", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -11035,19 +11035,19 @@ func NewGetNodeScheduleCronRequest(server string, hostname Hostname) (*http.Requ return req, nil } -// NewPostNodeScheduleCronRequest calls the generic PostNodeScheduleCron builder with application/json body -func NewPostNodeScheduleCronRequest(server string, hostname Hostname, body PostNodeScheduleCronJSONRequestBody) (*http.Request, error) { +// NewPostNodeScheduleRequest calls the generic PostNodeSchedule builder with application/json body +func NewPostNodeScheduleRequest(server string, hostname Hostname, body PostNodeScheduleJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader buf, err := json.Marshal(body) if err != nil { return nil, err } bodyReader = bytes.NewReader(buf) - return NewPostNodeScheduleCronRequestWithBody(server, hostname, "application/json", bodyReader) + return NewPostNodeScheduleRequestWithBody(server, hostname, "application/json", bodyReader) } -// NewPostNodeScheduleCronRequestWithBody generates requests for PostNodeScheduleCron with any type of body -func NewPostNodeScheduleCronRequestWithBody(server string, hostname Hostname, contentType string, body io.Reader) (*http.Request, error) { +// NewPostNodeScheduleRequestWithBody generates requests for PostNodeSchedule with any type of body +func NewPostNodeScheduleRequestWithBody(server string, hostname Hostname, contentType string, body io.Reader) (*http.Request, error) { var err error var pathParam0 string @@ -11062,7 +11062,7 @@ func NewPostNodeScheduleCronRequestWithBody(server string, hostname Hostname, co return nil, err } - operationPath := fmt.Sprintf("/api/node/%s/schedule/cron", pathParam0) + operationPath := fmt.Sprintf("/api/node/%s/schedule", pathParam0) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -11082,8 +11082,8 @@ func NewPostNodeScheduleCronRequestWithBody(server string, hostname Hostname, co return req, nil } -// NewDeleteNodeScheduleCronRequest generates requests for DeleteNodeScheduleCron -func NewDeleteNodeScheduleCronRequest(server string, hostname Hostname, name CronName) (*http.Request, error) { +// NewDeleteNodeScheduleRequest generates requests for DeleteNodeSchedule +func NewDeleteNodeScheduleRequest(server string, hostname Hostname, name ScheduleName) (*http.Request, error) { var err error var pathParam0 string @@ -11105,7 +11105,7 @@ func NewDeleteNodeScheduleCronRequest(server string, hostname Hostname, name Cro return nil, err } - operationPath := fmt.Sprintf("/api/node/%s/schedule/cron/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/node/%s/schedule/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -11123,8 +11123,8 @@ func NewDeleteNodeScheduleCronRequest(server string, hostname Hostname, name Cro return req, nil } -// NewGetNodeScheduleCronByNameRequest generates requests for GetNodeScheduleCronByName -func NewGetNodeScheduleCronByNameRequest(server string, hostname Hostname, name CronName) (*http.Request, error) { +// NewGetNodeScheduleByNameRequest generates requests for GetNodeScheduleByName +func NewGetNodeScheduleByNameRequest(server string, hostname Hostname, name ScheduleName) (*http.Request, error) { var err error var pathParam0 string @@ -11146,7 +11146,7 @@ func NewGetNodeScheduleCronByNameRequest(server string, hostname Hostname, name return nil, err } - operationPath := fmt.Sprintf("/api/node/%s/schedule/cron/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/node/%s/schedule/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -11164,19 +11164,19 @@ func NewGetNodeScheduleCronByNameRequest(server string, hostname Hostname, name return req, nil } -// NewPutNodeScheduleCronRequest calls the generic PutNodeScheduleCron builder with application/json body -func NewPutNodeScheduleCronRequest(server string, hostname Hostname, name CronName, body PutNodeScheduleCronJSONRequestBody) (*http.Request, error) { +// NewPutNodeScheduleRequest calls the generic PutNodeSchedule builder with application/json body +func NewPutNodeScheduleRequest(server string, hostname Hostname, name ScheduleName, body PutNodeScheduleJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader buf, err := json.Marshal(body) if err != nil { return nil, err } bodyReader = bytes.NewReader(buf) - return NewPutNodeScheduleCronRequestWithBody(server, hostname, name, "application/json", bodyReader) + return NewPutNodeScheduleRequestWithBody(server, hostname, name, "application/json", bodyReader) } -// NewPutNodeScheduleCronRequestWithBody generates requests for PutNodeScheduleCron with any type of body -func NewPutNodeScheduleCronRequestWithBody(server string, hostname Hostname, name CronName, contentType string, body io.Reader) (*http.Request, error) { +// NewPutNodeScheduleRequestWithBody generates requests for PutNodeSchedule with any type of body +func NewPutNodeScheduleRequestWithBody(server string, hostname Hostname, name ScheduleName, contentType string, body io.Reader) (*http.Request, error) { var err error var pathParam0 string @@ -11198,7 +11198,7 @@ func NewPutNodeScheduleCronRequestWithBody(server string, hostname Hostname, nam return nil, err } - operationPath := fmt.Sprintf("/api/node/%s/schedule/cron/%s", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/api/node/%s/schedule/%s", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -12767,24 +12767,24 @@ type ClientWithResponsesInterface interface { PostNodeProcessSignalWithResponse(ctx context.Context, hostname Hostname, pid Pid, body PostNodeProcessSignalJSONRequestBody, reqEditors ...RequestEditorFn) (*PostNodeProcessSignalResponse, error) - // GetNodeScheduleCronWithResponse request - GetNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*GetNodeScheduleCronResponse, error) + // GetNodeScheduleWithResponse request + GetNodeScheduleWithResponse(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*GetNodeScheduleResponse, error) - // PostNodeScheduleCronWithBodyWithResponse request with any body - PostNodeScheduleCronWithBodyWithResponse(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostNodeScheduleCronResponse, error) + // PostNodeScheduleWithBodyWithResponse request with any body + PostNodeScheduleWithBodyWithResponse(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostNodeScheduleResponse, error) - PostNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, body PostNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*PostNodeScheduleCronResponse, error) + PostNodeScheduleWithResponse(ctx context.Context, hostname Hostname, body PostNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*PostNodeScheduleResponse, error) - // DeleteNodeScheduleCronWithResponse request - DeleteNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*DeleteNodeScheduleCronResponse, error) + // DeleteNodeScheduleWithResponse request + DeleteNodeScheduleWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*DeleteNodeScheduleResponse, error) - // GetNodeScheduleCronByNameWithResponse request - GetNodeScheduleCronByNameWithResponse(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*GetNodeScheduleCronByNameResponse, error) + // GetNodeScheduleByNameWithResponse request + GetNodeScheduleByNameWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*GetNodeScheduleByNameResponse, error) - // PutNodeScheduleCronWithBodyWithResponse request with any body - PutNodeScheduleCronWithBodyWithResponse(ctx context.Context, hostname Hostname, name CronName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PutNodeScheduleCronResponse, error) + // PutNodeScheduleWithBodyWithResponse request with any body + PutNodeScheduleWithBodyWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PutNodeScheduleResponse, error) - PutNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, name CronName, body PutNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*PutNodeScheduleCronResponse, error) + PutNodeScheduleWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, body PutNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*PutNodeScheduleResponse, error) // GetNodeServiceWithResponse request GetNodeServiceWithResponse(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*GetNodeServiceResponse, error) @@ -15802,10 +15802,10 @@ func (r PostNodeProcessSignalResponse) ContentType() string { return "" } -type GetNodeScheduleCronResponse struct { +type GetNodeScheduleResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *CronCollectionResponse + JSON200 *ScheduleCollectionResponse JSON400 *ErrorResponse JSON401 *ErrorResponse JSON403 *ErrorResponse @@ -15813,7 +15813,7 @@ type GetNodeScheduleCronResponse struct { } // Status returns HTTPResponse.Status -func (r GetNodeScheduleCronResponse) Status() string { +func (r GetNodeScheduleResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -15821,7 +15821,7 @@ func (r GetNodeScheduleCronResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetNodeScheduleCronResponse) StatusCode() int { +func (r GetNodeScheduleResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -15829,17 +15829,17 @@ func (r GetNodeScheduleCronResponse) StatusCode() int { } // ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers -func (r GetNodeScheduleCronResponse) ContentType() string { +func (r GetNodeScheduleResponse) ContentType() string { if r.HTTPResponse != nil { return r.HTTPResponse.Header.Get("Content-Type") } return "" } -type PostNodeScheduleCronResponse struct { +type PostNodeScheduleResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *CronCreateResponse + JSON200 *ScheduleCreateResponse JSON400 *ErrorResponse JSON401 *ErrorResponse JSON403 *ErrorResponse @@ -15847,7 +15847,7 @@ type PostNodeScheduleCronResponse struct { } // Status returns HTTPResponse.Status -func (r PostNodeScheduleCronResponse) Status() string { +func (r PostNodeScheduleResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -15855,7 +15855,7 @@ func (r PostNodeScheduleCronResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r PostNodeScheduleCronResponse) StatusCode() int { +func (r PostNodeScheduleResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -15863,17 +15863,17 @@ func (r PostNodeScheduleCronResponse) StatusCode() int { } // ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers -func (r PostNodeScheduleCronResponse) ContentType() string { +func (r PostNodeScheduleResponse) ContentType() string { if r.HTTPResponse != nil { return r.HTTPResponse.Header.Get("Content-Type") } return "" } -type DeleteNodeScheduleCronResponse struct { +type DeleteNodeScheduleResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *CronDeleteResponse + JSON200 *ScheduleDeleteResponse JSON400 *ErrorResponse JSON401 *ErrorResponse JSON403 *ErrorResponse @@ -15882,7 +15882,7 @@ type DeleteNodeScheduleCronResponse struct { } // Status returns HTTPResponse.Status -func (r DeleteNodeScheduleCronResponse) Status() string { +func (r DeleteNodeScheduleResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -15890,7 +15890,7 @@ func (r DeleteNodeScheduleCronResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r DeleteNodeScheduleCronResponse) StatusCode() int { +func (r DeleteNodeScheduleResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -15898,17 +15898,17 @@ func (r DeleteNodeScheduleCronResponse) StatusCode() int { } // ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers -func (r DeleteNodeScheduleCronResponse) ContentType() string { +func (r DeleteNodeScheduleResponse) ContentType() string { if r.HTTPResponse != nil { return r.HTTPResponse.Header.Get("Content-Type") } return "" } -type GetNodeScheduleCronByNameResponse struct { +type GetNodeScheduleByNameResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *CronGetResponse + JSON200 *ScheduleGetResponse JSON400 *ErrorResponse JSON401 *ErrorResponse JSON403 *ErrorResponse @@ -15917,7 +15917,7 @@ type GetNodeScheduleCronByNameResponse struct { } // Status returns HTTPResponse.Status -func (r GetNodeScheduleCronByNameResponse) Status() string { +func (r GetNodeScheduleByNameResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -15925,7 +15925,7 @@ func (r GetNodeScheduleCronByNameResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r GetNodeScheduleCronByNameResponse) StatusCode() int { +func (r GetNodeScheduleByNameResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -15933,17 +15933,17 @@ func (r GetNodeScheduleCronByNameResponse) StatusCode() int { } // ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers -func (r GetNodeScheduleCronByNameResponse) ContentType() string { +func (r GetNodeScheduleByNameResponse) ContentType() string { if r.HTTPResponse != nil { return r.HTTPResponse.Header.Get("Content-Type") } return "" } -type PutNodeScheduleCronResponse struct { +type PutNodeScheduleResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *CronUpdateResponse + JSON200 *ScheduleUpdateResponse JSON400 *ErrorResponse JSON401 *ErrorResponse JSON403 *ErrorResponse @@ -15952,7 +15952,7 @@ type PutNodeScheduleCronResponse struct { } // Status returns HTTPResponse.Status -func (r PutNodeScheduleCronResponse) Status() string { +func (r PutNodeScheduleResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -15960,7 +15960,7 @@ func (r PutNodeScheduleCronResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r PutNodeScheduleCronResponse) StatusCode() int { +func (r PutNodeScheduleResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } @@ -15968,7 +15968,7 @@ func (r PutNodeScheduleCronResponse) StatusCode() int { } // ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers -func (r PutNodeScheduleCronResponse) ContentType() string { +func (r PutNodeScheduleResponse) ContentType() string { if r.HTTPResponse != nil { return r.HTTPResponse.Header.Get("Content-Type") } @@ -17921,65 +17921,65 @@ func (c *ClientWithResponses) PostNodeProcessSignalWithResponse(ctx context.Cont return ParsePostNodeProcessSignalResponse(rsp) } -// GetNodeScheduleCronWithResponse request returning *GetNodeScheduleCronResponse -func (c *ClientWithResponses) GetNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*GetNodeScheduleCronResponse, error) { - rsp, err := c.GetNodeScheduleCron(ctx, hostname, reqEditors...) +// GetNodeScheduleWithResponse request returning *GetNodeScheduleResponse +func (c *ClientWithResponses) GetNodeScheduleWithResponse(ctx context.Context, hostname Hostname, reqEditors ...RequestEditorFn) (*GetNodeScheduleResponse, error) { + rsp, err := c.GetNodeSchedule(ctx, hostname, reqEditors...) if err != nil { return nil, err } - return ParseGetNodeScheduleCronResponse(rsp) + return ParseGetNodeScheduleResponse(rsp) } -// PostNodeScheduleCronWithBodyWithResponse request with arbitrary body returning *PostNodeScheduleCronResponse -func (c *ClientWithResponses) PostNodeScheduleCronWithBodyWithResponse(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostNodeScheduleCronResponse, error) { - rsp, err := c.PostNodeScheduleCronWithBody(ctx, hostname, contentType, body, reqEditors...) +// PostNodeScheduleWithBodyWithResponse request with arbitrary body returning *PostNodeScheduleResponse +func (c *ClientWithResponses) PostNodeScheduleWithBodyWithResponse(ctx context.Context, hostname Hostname, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PostNodeScheduleResponse, error) { + rsp, err := c.PostNodeScheduleWithBody(ctx, hostname, contentType, body, reqEditors...) if err != nil { return nil, err } - return ParsePostNodeScheduleCronResponse(rsp) + return ParsePostNodeScheduleResponse(rsp) } -func (c *ClientWithResponses) PostNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, body PostNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*PostNodeScheduleCronResponse, error) { - rsp, err := c.PostNodeScheduleCron(ctx, hostname, body, reqEditors...) +func (c *ClientWithResponses) PostNodeScheduleWithResponse(ctx context.Context, hostname Hostname, body PostNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*PostNodeScheduleResponse, error) { + rsp, err := c.PostNodeSchedule(ctx, hostname, body, reqEditors...) if err != nil { return nil, err } - return ParsePostNodeScheduleCronResponse(rsp) + return ParsePostNodeScheduleResponse(rsp) } -// DeleteNodeScheduleCronWithResponse request returning *DeleteNodeScheduleCronResponse -func (c *ClientWithResponses) DeleteNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*DeleteNodeScheduleCronResponse, error) { - rsp, err := c.DeleteNodeScheduleCron(ctx, hostname, name, reqEditors...) +// DeleteNodeScheduleWithResponse request returning *DeleteNodeScheduleResponse +func (c *ClientWithResponses) DeleteNodeScheduleWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*DeleteNodeScheduleResponse, error) { + rsp, err := c.DeleteNodeSchedule(ctx, hostname, name, reqEditors...) if err != nil { return nil, err } - return ParseDeleteNodeScheduleCronResponse(rsp) + return ParseDeleteNodeScheduleResponse(rsp) } -// GetNodeScheduleCronByNameWithResponse request returning *GetNodeScheduleCronByNameResponse -func (c *ClientWithResponses) GetNodeScheduleCronByNameWithResponse(ctx context.Context, hostname Hostname, name CronName, reqEditors ...RequestEditorFn) (*GetNodeScheduleCronByNameResponse, error) { - rsp, err := c.GetNodeScheduleCronByName(ctx, hostname, name, reqEditors...) +// GetNodeScheduleByNameWithResponse request returning *GetNodeScheduleByNameResponse +func (c *ClientWithResponses) GetNodeScheduleByNameWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, reqEditors ...RequestEditorFn) (*GetNodeScheduleByNameResponse, error) { + rsp, err := c.GetNodeScheduleByName(ctx, hostname, name, reqEditors...) if err != nil { return nil, err } - return ParseGetNodeScheduleCronByNameResponse(rsp) + return ParseGetNodeScheduleByNameResponse(rsp) } -// PutNodeScheduleCronWithBodyWithResponse request with arbitrary body returning *PutNodeScheduleCronResponse -func (c *ClientWithResponses) PutNodeScheduleCronWithBodyWithResponse(ctx context.Context, hostname Hostname, name CronName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PutNodeScheduleCronResponse, error) { - rsp, err := c.PutNodeScheduleCronWithBody(ctx, hostname, name, contentType, body, reqEditors...) +// PutNodeScheduleWithBodyWithResponse request with arbitrary body returning *PutNodeScheduleResponse +func (c *ClientWithResponses) PutNodeScheduleWithBodyWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PutNodeScheduleResponse, error) { + rsp, err := c.PutNodeScheduleWithBody(ctx, hostname, name, contentType, body, reqEditors...) if err != nil { return nil, err } - return ParsePutNodeScheduleCronResponse(rsp) + return ParsePutNodeScheduleResponse(rsp) } -func (c *ClientWithResponses) PutNodeScheduleCronWithResponse(ctx context.Context, hostname Hostname, name CronName, body PutNodeScheduleCronJSONRequestBody, reqEditors ...RequestEditorFn) (*PutNodeScheduleCronResponse, error) { - rsp, err := c.PutNodeScheduleCron(ctx, hostname, name, body, reqEditors...) +func (c *ClientWithResponses) PutNodeScheduleWithResponse(ctx context.Context, hostname Hostname, name ScheduleName, body PutNodeScheduleJSONRequestBody, reqEditors ...RequestEditorFn) (*PutNodeScheduleResponse, error) { + rsp, err := c.PutNodeSchedule(ctx, hostname, name, body, reqEditors...) if err != nil { return nil, err } - return ParsePutNodeScheduleCronResponse(rsp) + return ParsePutNodeScheduleResponse(rsp) } // GetNodeServiceWithResponse request returning *GetNodeServiceResponse @@ -23009,22 +23009,22 @@ func ParsePostNodeProcessSignalResponse(rsp *http.Response) (*PostNodeProcessSig return response, nil } -// ParseGetNodeScheduleCronResponse parses an HTTP response from a GetNodeScheduleCronWithResponse call -func ParseGetNodeScheduleCronResponse(rsp *http.Response) (*GetNodeScheduleCronResponse, error) { +// ParseGetNodeScheduleResponse parses an HTTP response from a GetNodeScheduleWithResponse call +func ParseGetNodeScheduleResponse(rsp *http.Response) (*GetNodeScheduleResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &GetNodeScheduleCronResponse{ + response := &GetNodeScheduleResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest CronCollectionResponse + var dest ScheduleCollectionResponse if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -23063,22 +23063,22 @@ func ParseGetNodeScheduleCronResponse(rsp *http.Response) (*GetNodeScheduleCronR return response, nil } -// ParsePostNodeScheduleCronResponse parses an HTTP response from a PostNodeScheduleCronWithResponse call -func ParsePostNodeScheduleCronResponse(rsp *http.Response) (*PostNodeScheduleCronResponse, error) { +// ParsePostNodeScheduleResponse parses an HTTP response from a PostNodeScheduleWithResponse call +func ParsePostNodeScheduleResponse(rsp *http.Response) (*PostNodeScheduleResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &PostNodeScheduleCronResponse{ + response := &PostNodeScheduleResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest CronCreateResponse + var dest ScheduleCreateResponse if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -23117,22 +23117,22 @@ func ParsePostNodeScheduleCronResponse(rsp *http.Response) (*PostNodeScheduleCro return response, nil } -// ParseDeleteNodeScheduleCronResponse parses an HTTP response from a DeleteNodeScheduleCronWithResponse call -func ParseDeleteNodeScheduleCronResponse(rsp *http.Response) (*DeleteNodeScheduleCronResponse, error) { +// ParseDeleteNodeScheduleResponse parses an HTTP response from a DeleteNodeScheduleWithResponse call +func ParseDeleteNodeScheduleResponse(rsp *http.Response) (*DeleteNodeScheduleResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &DeleteNodeScheduleCronResponse{ + response := &DeleteNodeScheduleResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest CronDeleteResponse + var dest ScheduleDeleteResponse if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -23178,22 +23178,22 @@ func ParseDeleteNodeScheduleCronResponse(rsp *http.Response) (*DeleteNodeSchedul return response, nil } -// ParseGetNodeScheduleCronByNameResponse parses an HTTP response from a GetNodeScheduleCronByNameWithResponse call -func ParseGetNodeScheduleCronByNameResponse(rsp *http.Response) (*GetNodeScheduleCronByNameResponse, error) { +// ParseGetNodeScheduleByNameResponse parses an HTTP response from a GetNodeScheduleByNameWithResponse call +func ParseGetNodeScheduleByNameResponse(rsp *http.Response) (*GetNodeScheduleByNameResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &GetNodeScheduleCronByNameResponse{ + response := &GetNodeScheduleByNameResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest CronGetResponse + var dest ScheduleGetResponse if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -23239,22 +23239,22 @@ func ParseGetNodeScheduleCronByNameResponse(rsp *http.Response) (*GetNodeSchedul return response, nil } -// ParsePutNodeScheduleCronResponse parses an HTTP response from a PutNodeScheduleCronWithResponse call -func ParsePutNodeScheduleCronResponse(rsp *http.Response) (*PutNodeScheduleCronResponse, error) { +// ParsePutNodeScheduleResponse parses an HTTP response from a PutNodeScheduleWithResponse call +func ParsePutNodeScheduleResponse(rsp *http.Response) (*PutNodeScheduleResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &PutNodeScheduleCronResponse{ + response := &PutNodeScheduleResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest CronUpdateResponse + var dest ScheduleUpdateResponse if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } diff --git a/pkg/sdk/client/operations.go b/pkg/sdk/client/operations.go index 09ae510bf..e62adad4d 100644 --- a/pkg/sdk/client/operations.go +++ b/pkg/sdk/client/operations.go @@ -84,11 +84,11 @@ const ( // Schedule/Cron operations. const ( - OpCronList JobOperation = "schedule.cron.list" - OpCronGet JobOperation = "schedule.cron.get" - OpCronCreate JobOperation = "schedule.cron.create" - OpCronUpdate JobOperation = "schedule.cron.update" - OpCronDelete JobOperation = "schedule.cron.delete" + OpScheduleList JobOperation = "schedule.cron.list" + OpScheduleGet JobOperation = "schedule.cron.get" + OpScheduleCreate JobOperation = "schedule.cron.create" + OpScheduleUpdate JobOperation = "schedule.cron.update" + OpScheduleDelete JobOperation = "schedule.cron.delete" ) // Sysctl operations. diff --git a/pkg/sdk/client/osapi.go b/pkg/sdk/client/osapi.go index c55cc45ba..f314cb72d 100644 --- a/pkg/sdk/client/osapi.go +++ b/pkg/sdk/client/osapi.go @@ -96,9 +96,9 @@ type Client struct { // inspect, start, stop, remove, exec, pull). Docker *DockerService - // Cron provides cron schedule management operations (list, get, + // Schedule provides scheduled task management operations (list, get, // create, update, delete). - Cron *CronService + Schedule *ScheduleService // Sysctl provides sysctl parameter management operations (list, get, // set, delete). @@ -223,7 +223,7 @@ func New( c.Audit = &AuditService{client: httpClient} c.File = &FileService{client: httpClient} c.Docker = &DockerService{client: httpClient} - c.Cron = &CronService{client: httpClient} + c.Schedule = &ScheduleService{client: httpClient} c.Sysctl = &SysctlService{client: httpClient} c.NTP = &NTPService{client: httpClient} c.Timezone = &TimezoneService{client: httpClient} diff --git a/pkg/sdk/client/permissions.go b/pkg/sdk/client/permissions.go index 57ecc09cd..14f31f4d5 100644 --- a/pkg/sdk/client/permissions.go +++ b/pkg/sdk/client/permissions.go @@ -44,8 +44,8 @@ const ( PermDockerRead Permission = "docker:read" PermDockerWrite Permission = "docker:write" PermDockerExecute Permission = "docker:execute" - PermCronRead Permission = "cron:read" - PermCronWrite Permission = "cron:write" + PermCronRead Permission = "schedule:read" + PermCronWrite Permission = "schedule:write" PermSysctlRead Permission = "sysctl:read" PermSysctlWrite Permission = "sysctl:write" PermNtpRead Permission = "ntp:read" diff --git a/pkg/sdk/client/cron.go b/pkg/sdk/client/schedule.go similarity index 79% rename from pkg/sdk/client/cron.go rename to pkg/sdk/client/schedule.go index 00d432f37..153a6cea1 100644 --- a/pkg/sdk/client/cron.go +++ b/pkg/sdk/client/schedule.go @@ -27,17 +27,17 @@ import ( "github.com/osapi-io/osapi/pkg/sdk/client/gen" ) -// CronService provides cron schedule management operations. -type CronService struct { +// ScheduleService provides cron schedule management operations. +type ScheduleService struct { client *gen.ClientWithResponses } // List lists all cron entries on the target host. -func (s *CronService) List( +func (s *ScheduleService) List( ctx context.Context, hostname string, -) (*Response[Collection[CronEntryResult]], error) { - resp, err := s.client.GetNodeScheduleCronWithResponse(ctx, hostname) +) (*Response[Collection[ScheduleEntryResult]], error) { + resp, err := s.client.GetNodeScheduleWithResponse(ctx, hostname) if err != nil { return nil, fmt.Errorf("cron list: %w", err) } @@ -63,12 +63,12 @@ func (s *CronService) List( } // Get retrieves a single cron entry by name on the target host. -func (s *CronService) Get( +func (s *ScheduleService) Get( ctx context.Context, hostname string, name string, -) (*Response[Collection[CronEntryResult]], error) { - resp, err := s.client.GetNodeScheduleCronByNameWithResponse(ctx, hostname, name) +) (*Response[Collection[ScheduleEntryResult]], error) { + resp, err := s.client.GetNodeScheduleByNameWithResponse(ctx, hostname, name) if err != nil { return nil, fmt.Errorf("cron get: %w", err) } @@ -95,12 +95,12 @@ func (s *CronService) Get( } // Create creates a new cron entry on the target host. -func (s *CronService) Create( +func (s *ScheduleService) Create( ctx context.Context, hostname string, - opts CronCreateOpts, -) (*Response[Collection[CronMutationResult]], error) { - body := gen.CronCreateRequest{ + opts ScheduleCreateOpts, +) (*Response[Collection[ScheduleMutationResult]], error) { + body := gen.ScheduleCreateRequest{ Name: opts.Name, Object: opts.Object, } @@ -108,21 +108,21 @@ func (s *CronService) Create( body.Schedule = &opts.Schedule } if opts.Interval != "" { - interval := gen.CronCreateRequestInterval(opts.Interval) + interval := gen.ScheduleCreateRequestInterval(opts.Interval) body.Interval = &interval } if opts.User != "" { body.User = &opts.User } if opts.ContentType != "" { - ct := gen.CronCreateRequestContentType(opts.ContentType) + ct := gen.ScheduleCreateRequestContentType(opts.ContentType) body.ContentType = &ct } if opts.Vars != nil { body.Vars = &opts.Vars } - resp, err := s.client.PostNodeScheduleCronWithResponse(ctx, hostname, body) + resp, err := s.client.PostNodeScheduleWithResponse(ctx, hostname, body) if err != nil { return nil, fmt.Errorf("cron create: %w", err) } @@ -148,13 +148,13 @@ func (s *CronService) Create( } // Update updates an existing cron entry on the target host. -func (s *CronService) Update( +func (s *ScheduleService) Update( ctx context.Context, hostname string, name string, - opts CronUpdateOpts, -) (*Response[Collection[CronMutationResult]], error) { - body := gen.CronUpdateRequest{} + opts ScheduleUpdateOpts, +) (*Response[Collection[ScheduleMutationResult]], error) { + body := gen.ScheduleUpdateRequest{} if opts.Object != "" { body.Object = &opts.Object } @@ -165,14 +165,14 @@ func (s *CronService) Update( body.User = &opts.User } if opts.ContentType != "" { - ct := gen.CronUpdateRequestContentType(opts.ContentType) + ct := gen.ScheduleUpdateRequestContentType(opts.ContentType) body.ContentType = &ct } if opts.Vars != nil { body.Vars = &opts.Vars } - resp, err := s.client.PutNodeScheduleCronWithResponse(ctx, hostname, name, body) + resp, err := s.client.PutNodeScheduleWithResponse(ctx, hostname, name, body) if err != nil { return nil, fmt.Errorf("cron update: %w", err) } @@ -199,12 +199,12 @@ func (s *CronService) Update( } // Delete deletes a cron entry on the target host. -func (s *CronService) Delete( +func (s *ScheduleService) Delete( ctx context.Context, hostname string, name string, -) (*Response[Collection[CronMutationResult]], error) { - resp, err := s.client.DeleteNodeScheduleCronWithResponse(ctx, hostname, name) +) (*Response[Collection[ScheduleMutationResult]], error) { + resp, err := s.client.DeleteNodeScheduleWithResponse(ctx, hostname, name) if err != nil { return nil, fmt.Errorf("cron delete: %w", err) } diff --git a/pkg/sdk/client/cron_public_test.go b/pkg/sdk/client/schedule_public_test.go similarity index 85% rename from pkg/sdk/client/cron_public_test.go rename to pkg/sdk/client/schedule_public_test.go index 170a00f25..fcc84ba12 100644 --- a/pkg/sdk/client/cron_public_test.go +++ b/pkg/sdk/client/schedule_public_test.go @@ -33,22 +33,22 @@ import ( "github.com/osapi-io/osapi/pkg/sdk/client" ) -type CronPublicTestSuite struct { +type SchedulePublicTestSuite struct { suite.Suite ctx context.Context } -func (suite *CronPublicTestSuite) SetupTest() { +func (suite *SchedulePublicTestSuite) SetupTest() { suite.ctx = context.Background() } -func (suite *CronPublicTestSuite) TestCronList() { +func (suite *SchedulePublicTestSuite) TestScheduleList() { tests := []struct { name string handler http.HandlerFunc serverURL string - validateFunc func(*client.Response[client.Collection[client.CronEntryResult]], error) + validateFunc func(*client.Response[client.Collection[client.ScheduleEntryResult]], error) }{ { name: "when listing cron entries returns results", @@ -62,7 +62,7 @@ func (suite *CronPublicTestSuite) TestCronList() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.NoError(err) @@ -88,7 +88,7 @@ func (suite *CronPublicTestSuite) TestCronList() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.NoError(err) @@ -107,14 +107,14 @@ func (suite *CronPublicTestSuite) TestCronList() { }, }, { - name: "when CronList server returns 403 returns AuthError", + name: "when ScheduleList server returns 403 returns AuthError", handler: func(w http.ResponseWriter, _ *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusForbidden) _, _ = w.Write([]byte(`{"error":"forbidden"}`)) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -129,7 +129,7 @@ func (suite *CronPublicTestSuite) TestCronList() { name: "when client HTTP call fails returns error", serverURL: "http://127.0.0.1:0", validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -143,7 +143,7 @@ func (suite *CronPublicTestSuite) TestCronList() { w.WriteHeader(http.StatusOK) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -186,12 +186,12 @@ func (suite *CronPublicTestSuite) TestCronList() { } } -func (suite *CronPublicTestSuite) TestCronGet() { +func (suite *SchedulePublicTestSuite) TestScheduleGet() { tests := []struct { name string handler http.HandlerFunc serverURL string - validateFunc func(*client.Response[client.Collection[client.CronEntryResult]], error) + validateFunc func(*client.Response[client.Collection[client.ScheduleEntryResult]], error) }{ { name: "when getting cron entry returns result collection", @@ -205,7 +205,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.NoError(err) @@ -231,7 +231,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.NoError(err) @@ -254,7 +254,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.NoError(err) @@ -270,7 +270,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { _, _ = w.Write([]byte(`{"error":"cron entry not found"}`)) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -289,7 +289,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { _, _ = w.Write([]byte(`{"error":"forbidden"}`)) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -304,7 +304,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { name: "when client HTTP call fails returns error", serverURL: "http://127.0.0.1:0", validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -318,7 +318,7 @@ func (suite *CronPublicTestSuite) TestCronGet() { w.WriteHeader(http.StatusOK) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronEntryResult]], + resp *client.Response[client.Collection[client.ScheduleEntryResult]], err error, ) { suite.Error(err) @@ -361,13 +361,13 @@ func (suite *CronPublicTestSuite) TestCronGet() { } } -func (suite *CronPublicTestSuite) TestCronCreate() { +func (suite *SchedulePublicTestSuite) TestScheduleCreate() { tests := []struct { name string handler http.HandlerFunc serverURL string - opts client.CronCreateOpts - validateFunc func(*client.Response[client.Collection[client.CronMutationResult]], error) + opts client.ScheduleCreateOpts + validateFunc func(*client.Response[client.Collection[client.ScheduleMutationResult]], error) }{ { name: "when creating cron entry returns result collection", @@ -380,13 +380,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { ), ) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "backup", Schedule: "0 2 * * *", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -409,14 +409,14 @@ func (suite *CronPublicTestSuite) TestCronCreate() { ), ) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "cleanup", Schedule: "*/5 * * * *", Object: "/usr/bin/cleanup.sh", User: "www-data", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -437,13 +437,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { ), ) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "daily-backup", Interval: "daily", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -464,7 +464,7 @@ func (suite *CronPublicTestSuite) TestCronCreate() { ), ) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "template-job", Schedule: "0 1 * * *", Object: "/usr/bin/template-job.sh", @@ -472,7 +472,7 @@ func (suite *CronPublicTestSuite) TestCronCreate() { Vars: map[string]any{"env": "prod"}, }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -493,13 +493,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { ), ) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "backup", Schedule: "0 2 * * *", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -514,13 +514,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { w.WriteHeader(http.StatusBadRequest) _, _ = w.Write([]byte(`{"error":"invalid schedule"}`)) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "bad", Schedule: "invalid", Object: "echo", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -538,13 +538,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { w.WriteHeader(http.StatusForbidden) _, _ = w.Write([]byte(`{"error":"forbidden"}`)) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "backup", Schedule: "0 2 * * *", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -558,13 +558,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { { name: "when client HTTP call fails returns error", serverURL: "http://127.0.0.1:0", - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "backup", Schedule: "0 2 * * *", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -577,13 +577,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { handler: func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }, - opts: client.CronCreateOpts{ + opts: client.ScheduleCreateOpts{ Name: "backup", Schedule: "0 2 * * *", Object: "/usr/bin/backup.sh", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -626,13 +626,13 @@ func (suite *CronPublicTestSuite) TestCronCreate() { } } -func (suite *CronPublicTestSuite) TestCronUpdate() { +func (suite *SchedulePublicTestSuite) TestScheduleUpdate() { tests := []struct { name string handler http.HandlerFunc serverURL string - opts client.CronUpdateOpts - validateFunc func(*client.Response[client.Collection[client.CronMutationResult]], error) + opts client.ScheduleUpdateOpts + validateFunc func(*client.Response[client.Collection[client.ScheduleMutationResult]], error) }{ { name: "when updating cron entry returns result collection", @@ -645,11 +645,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { ), ) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -670,13 +670,13 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { ), ) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 4 * * *", Object: "/usr/bin/new-backup.sh", User: "admin", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -696,13 +696,13 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { ), ) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Object: "/usr/bin/new-template.sh", ContentType: "template", Vars: map[string]any{"region": "us-east"}, }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -723,11 +723,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { ), ) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -742,11 +742,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { w.WriteHeader(http.StatusNotFound) _, _ = w.Write([]byte(`{"error":"cron entry not found"}`)) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -764,11 +764,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { w.WriteHeader(http.StatusBadRequest) _, _ = w.Write([]byte(`{"error":"invalid schedule"}`)) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "bad", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -786,11 +786,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { w.WriteHeader(http.StatusForbidden) _, _ = w.Write([]byte(`{"error":"forbidden"}`)) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -804,11 +804,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { { name: "when client HTTP call fails returns error", serverURL: "http://127.0.0.1:0", - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -821,11 +821,11 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { handler: func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }, - opts: client.CronUpdateOpts{ + opts: client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -873,12 +873,12 @@ func (suite *CronPublicTestSuite) TestCronUpdate() { } } -func (suite *CronPublicTestSuite) TestCronDelete() { +func (suite *SchedulePublicTestSuite) TestScheduleDelete() { tests := []struct { name string handler http.HandlerFunc serverURL string - validateFunc func(*client.Response[client.Collection[client.CronMutationResult]], error) + validateFunc func(*client.Response[client.Collection[client.ScheduleMutationResult]], error) }{ { name: "when deleting cron entry returns result collection", @@ -892,7 +892,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -914,7 +914,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { ) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.NoError(err) @@ -930,7 +930,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { _, _ = w.Write([]byte(`{"error":"cron entry not found"}`)) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -949,7 +949,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { _, _ = w.Write([]byte(`{"error":"forbidden"}`)) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -964,7 +964,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { name: "when client HTTP call fails returns error", serverURL: "http://127.0.0.1:0", validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -978,7 +978,7 @@ func (suite *CronPublicTestSuite) TestCronDelete() { w.WriteHeader(http.StatusOK) }, validateFunc: func( - resp *client.Response[client.Collection[client.CronMutationResult]], + resp *client.Response[client.Collection[client.ScheduleMutationResult]], err error, ) { suite.Error(err) @@ -1021,8 +1021,8 @@ func (suite *CronPublicTestSuite) TestCronDelete() { } } -func TestCronPublicTestSuite( +func TestSchedulePublicTestSuite( t *testing.T, ) { - suite.Run(t, new(CronPublicTestSuite)) + suite.Run(t, new(SchedulePublicTestSuite)) } diff --git a/pkg/sdk/client/cron_types.go b/pkg/sdk/client/schedule_types.go similarity index 68% rename from pkg/sdk/client/cron_types.go rename to pkg/sdk/client/schedule_types.go index ff030a309..13782099b 100644 --- a/pkg/sdk/client/cron_types.go +++ b/pkg/sdk/client/schedule_types.go @@ -24,8 +24,8 @@ import ( "github.com/osapi-io/osapi/pkg/sdk/client/gen" ) -// CronEntryResult represents a cron entry from a single agent. -type CronEntryResult struct { +// ScheduleEntryResult represents a cron entry from a single agent. +type ScheduleEntryResult struct { Hostname string `json:"hostname,omitempty"` Status string `json:"status"` Name string `json:"name"` @@ -37,8 +37,8 @@ type CronEntryResult struct { Error string `json:"error,omitempty"` } -// CronMutationResult represents the result of a cron create/update/delete operation. -type CronMutationResult struct { +// ScheduleMutationResult represents the result of a cron create/update/delete operation. +type ScheduleMutationResult struct { Hostname string `json:"hostname,omitempty"` Status string `json:"status"` Name string `json:"name"` @@ -46,8 +46,8 @@ type CronMutationResult struct { Error string `json:"error,omitempty"` } -// CronCreateOpts contains options for creating a cron entry. -type CronCreateOpts struct { +// ScheduleCreateOpts contains options for creating a cron entry. +type ScheduleCreateOpts struct { // Name is the cron drop-in entry name (required). Name string // Object is the name of the uploaded file in the object store (required). @@ -65,8 +65,8 @@ type CronCreateOpts struct { Vars map[string]any } -// CronUpdateOpts contains options for updating a cron entry. -type CronUpdateOpts struct { +// ScheduleUpdateOpts contains options for updating a cron entry. +type ScheduleUpdateOpts struct { // Object is the new object to deploy (optional). Object string // Schedule is the cron expression (optional). @@ -79,19 +79,19 @@ type CronUpdateOpts struct { Vars map[string]any } -// cronEntryCollectionFromGen converts a gen.CronCollectionResponse -// to a Collection[CronEntryResult]. +// cronEntryCollectionFromGen converts a gen.ScheduleCollectionResponse +// to a Collection[ScheduleEntryResult]. func cronEntryCollectionFromGen( - g *gen.CronCollectionResponse, -) Collection[CronEntryResult] { - results := make([]CronEntryResult, 0, len(g.Results)) + g *gen.ScheduleCollectionResponse, +) Collection[ScheduleEntryResult] { + results := make([]ScheduleEntryResult, 0, len(g.Results)) for _, r := range g.Results { var interval string if r.Interval != nil { interval = string(*r.Interval) } - results = append(results, CronEntryResult{ + results = append(results, ScheduleEntryResult{ Hostname: r.Hostname, Status: string(r.Status), Name: derefString(r.Name), @@ -104,25 +104,25 @@ func cronEntryCollectionFromGen( }) } - return Collection[CronEntryResult]{ + return Collection[ScheduleEntryResult]{ Results: results, JobID: jobIDFromGen(g.JobId), } } -// cronGetCollectionFromGen converts a gen.CronGetResponse -// to a Collection[CronEntryResult]. +// cronGetCollectionFromGen converts a gen.ScheduleGetResponse +// to a Collection[ScheduleEntryResult]. func cronGetCollectionFromGen( - g *gen.CronGetResponse, -) Collection[CronEntryResult] { - results := make([]CronEntryResult, 0, len(g.Results)) + g *gen.ScheduleGetResponse, +) Collection[ScheduleEntryResult] { + results := make([]ScheduleEntryResult, 0, len(g.Results)) for _, r := range g.Results { var interval string if r.Interval != nil { interval = string(*r.Interval) } - results = append(results, CronEntryResult{ + results = append(results, ScheduleEntryResult{ Hostname: r.Hostname, Status: string(r.Status), Name: derefString(r.Name), @@ -135,20 +135,20 @@ func cronGetCollectionFromGen( }) } - return Collection[CronEntryResult]{ + return Collection[ScheduleEntryResult]{ Results: results, JobID: jobIDFromGen(g.JobId), } } -// cronMutationCollectionFromCreate converts a gen.CronCreateResponse -// to a Collection[CronMutationResult]. +// cronMutationCollectionFromCreate converts a gen.ScheduleCreateResponse +// to a Collection[ScheduleMutationResult]. func cronMutationCollectionFromCreate( - g *gen.CronCreateResponse, -) Collection[CronMutationResult] { - results := make([]CronMutationResult, 0, len(g.Results)) + g *gen.ScheduleCreateResponse, +) Collection[ScheduleMutationResult] { + results := make([]ScheduleMutationResult, 0, len(g.Results)) for _, r := range g.Results { - results = append(results, CronMutationResult{ + results = append(results, ScheduleMutationResult{ Hostname: r.Hostname, Status: string(r.Status), Name: derefString(r.Name), @@ -157,20 +157,20 @@ func cronMutationCollectionFromCreate( }) } - return Collection[CronMutationResult]{ + return Collection[ScheduleMutationResult]{ Results: results, JobID: jobIDFromGen(g.JobId), } } -// cronMutationCollectionFromUpdate converts a gen.CronUpdateResponse -// to a Collection[CronMutationResult]. +// cronMutationCollectionFromUpdate converts a gen.ScheduleUpdateResponse +// to a Collection[ScheduleMutationResult]. func cronMutationCollectionFromUpdate( - g *gen.CronUpdateResponse, -) Collection[CronMutationResult] { - results := make([]CronMutationResult, 0, len(g.Results)) + g *gen.ScheduleUpdateResponse, +) Collection[ScheduleMutationResult] { + results := make([]ScheduleMutationResult, 0, len(g.Results)) for _, r := range g.Results { - results = append(results, CronMutationResult{ + results = append(results, ScheduleMutationResult{ Hostname: r.Hostname, Status: string(r.Status), Name: derefString(r.Name), @@ -179,20 +179,20 @@ func cronMutationCollectionFromUpdate( }) } - return Collection[CronMutationResult]{ + return Collection[ScheduleMutationResult]{ Results: results, JobID: jobIDFromGen(g.JobId), } } -// cronMutationCollectionFromDelete converts a gen.CronDeleteResponse -// to a Collection[CronMutationResult]. +// cronMutationCollectionFromDelete converts a gen.ScheduleDeleteResponse +// to a Collection[ScheduleMutationResult]. func cronMutationCollectionFromDelete( - g *gen.CronDeleteResponse, -) Collection[CronMutationResult] { - results := make([]CronMutationResult, 0, len(g.Results)) + g *gen.ScheduleDeleteResponse, +) Collection[ScheduleMutationResult] { + results := make([]ScheduleMutationResult, 0, len(g.Results)) for _, r := range g.Results { - results = append(results, CronMutationResult{ + results = append(results, ScheduleMutationResult{ Hostname: r.Hostname, Status: string(r.Status), Name: derefString(r.Name), @@ -201,7 +201,7 @@ func cronMutationCollectionFromDelete( }) } - return Collection[CronMutationResult]{ + return Collection[ScheduleMutationResult]{ Results: results, JobID: jobIDFromGen(g.JobId), } diff --git a/ui/src/sdk/gen/api.yaml b/ui/src/sdk/gen/api.yaml index 91cfc7305..d5eddc26c 100644 --- a/ui/src/sdk/gen/api.yaml +++ b/ui/src/sdk/gen/api.yaml @@ -78,9 +78,9 @@ tags: - name: Process_Management_API_process_operations x-displayName: Node/Process description: Process management operations on a target node. - - name: Schedule_Management_API_cron_operations - x-displayName: Node/Schedule/Cron - description: Cron drop-in file management on a target node. + - name: Schedule_Management_API_schedule_operations + x-displayName: Node/Schedule + description: Scheduled task management on a target node. - name: Service_Management_API_service_operations x-displayName: Node/Service description: Systemd service management on a target node. @@ -4310,27 +4310,27 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /api/node/{hostname}/schedule/cron: + /api/node/{hostname}/schedule: servers: [] get: - summary: List all cron entries + summary: List all scheduled entries description: | - List all cron drop-in entries on the target node. + List all scheduled entries on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: GetNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: GetNodeSchedule security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' responses: '200': - description: List of cron entries. + description: List of scheduled entries. content: application/json: schema: - $ref: '#/components/schemas/CronCollectionResponse' + $ref: '#/components/schemas/ScheduleCollectionResponse' '400': description: Bad request - validation error. content: @@ -4350,37 +4350,37 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error listing cron entries. + description: Error listing scheduled entries. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' post: - summary: Create a cron entry + summary: Create a scheduled entry description: | - Create a new cron drop-in entry on the target node. + Create a new scheduled entry on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: PostNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: PostNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' requestBody: - description: Cron entry creation parameters. + description: Scheduled entry creation parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronCreateRequest' + $ref: '#/components/schemas/ScheduleCreateRequest' responses: '200': - description: Cron entry created. + description: Scheduled entry created. content: application/json: schema: - $ref: '#/components/schemas/CronCreateResponse' + $ref: '#/components/schemas/ScheduleCreateResponse' '400': description: Invalid request payload. content: @@ -4400,33 +4400,33 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error creating cron entry. + description: Error creating scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /api/node/{hostname}/schedule/cron/{name}: + /api/node/{hostname}/schedule/{name}: servers: [] get: - summary: Get a cron entry + summary: Get a scheduled entry description: | - Get a specific cron drop-in entry by name on the target node. + Get a specific scheduled entry by name on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: GetNodeScheduleCronByName + - Schedule_Management_API_schedule_operations + operationId: GetNodeScheduleByName security: - BearerAuth: - - cron:read + - schedule:read parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry detail. + description: Scheduled entry detail. content: application/json: schema: - $ref: '#/components/schemas/CronGetResponse' + $ref: '#/components/schemas/ScheduleGetResponse' '400': description: Bad request - validation error. content: @@ -4446,44 +4446,44 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error retrieving cron entry. + description: Error retrieving scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' put: - summary: Update a cron entry + summary: Update a scheduled entry description: | - Update an existing cron drop-in entry on the target node. + Update an existing scheduled entry on the target node. tags: - - Schedule_Management_API_cron_operations - operationId: PutNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: PutNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' requestBody: - description: Cron entry update parameters. + description: Scheduled entry update parameters. required: true content: application/json: schema: - $ref: '#/components/schemas/CronUpdateRequest' + $ref: '#/components/schemas/ScheduleUpdateRequest' responses: '200': - description: Cron entry updated. + description: Scheduled entry updated. content: application/json: schema: - $ref: '#/components/schemas/CronUpdateResponse' + $ref: '#/components/schemas/ScheduleUpdateResponse' '400': description: Invalid request payload. content: @@ -4503,37 +4503,37 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error updating cron entry. + description: Error updating scheduled entry. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' delete: - summary: Delete a cron entry + summary: Delete a scheduled entry description: | - Delete a cron drop-in entry from the target node. + Delete a scheduled entry from the target node. tags: - - Schedule_Management_API_cron_operations - operationId: DeleteNodeScheduleCron + - Schedule_Management_API_schedule_operations + operationId: DeleteNodeSchedule security: - BearerAuth: - - cron:write + - schedule:write parameters: - $ref: '#/components/parameters/Hostname' - - $ref: '#/components/parameters/CronName' + - $ref: '#/components/parameters/ScheduleName' responses: '200': - description: Cron entry deleted. + description: Scheduled entry deleted. content: application/json: schema: - $ref: '#/components/schemas/CronDeleteResponse' + $ref: '#/components/schemas/ScheduleDeleteResponse' '400': description: Bad request - validation error. content: @@ -4553,13 +4553,13 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: Cron entry not found. + description: Scheduled entry not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': - description: Error deleting cron entry. + description: Error deleting scheduled entry. content: application/json: schema: @@ -9748,7 +9748,7 @@ components: $ref: '#/components/schemas/ProcessSignalResult' required: - results - CronCreateRequest: + ScheduleCreateRequest: type: object required: - name @@ -9757,15 +9757,15 @@ components: name: type: string description: > - Name for the cron drop-in entry. Used as the file name under + Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. x-oapi-codegen-extra-tags: validate: required,min=1,max=64 object: type: string description: > - Name of the uploaded file in the object store to deploy as the cron - entry content. + Name of the uploaded file in the object store to deploy as the + scheduled entry content. x-oapi-codegen-extra-tags: validate: required,min=1 schedule: @@ -9812,7 +9812,7 @@ components: additionalProperties: true description: | Template variables. Only used when content_type is "template". - CronUpdateRequest: + ScheduleUpdateRequest: type: object properties: object: @@ -9844,9 +9844,9 @@ components: additionalProperties: true description: | Template variables. - CronEntry: + ScheduleEntry: type: object - description: A cron drop-in entry. + description: A scheduled entry. properties: hostname: type: string @@ -9861,7 +9861,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. object: type: string description: Object store name for the deployed content. @@ -9886,14 +9886,14 @@ components: "monthly". user: type: string - description: User the cron entry runs as. + description: User the scheduled entry runs as. error: type: string description: Error message if the agent failed to retrieve this entry. required: - hostname - status - CronCollectionResponse: + ScheduleCollectionResponse: type: object properties: job_id: @@ -9904,12 +9904,12 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronGetResponse: + ScheduleGetResponse: type: object - description: Collection response for a single cron entry get operation. + description: Collection response for a single scheduled entry get operation. properties: job_id: type: string @@ -9919,10 +9919,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronEntry' + $ref: '#/components/schemas/ScheduleEntry' required: - results - CronMutationResult: + ScheduleMutationResult: type: object description: Result of a cron create, update, or delete operation for one host. properties: @@ -9939,7 +9939,7 @@ components: description: The status of the operation for this host. name: type: string - description: Cron entry name. + description: Scheduled entry name. changed: type: boolean description: Whether the operation modified system state. @@ -9949,7 +9949,7 @@ components: required: - hostname - status - CronCreateResponse: + ScheduleCreateResponse: type: object properties: job_id: @@ -9960,10 +9960,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronUpdateResponse: + ScheduleUpdateResponse: type: object properties: job_id: @@ -9974,10 +9974,10 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results - CronDeleteResponse: + ScheduleDeleteResponse: type: object properties: job_id: @@ -9988,7 +9988,7 @@ components: results: type: array items: - $ref: '#/components/schemas/CronMutationResult' + $ref: '#/components/schemas/ScheduleMutationResult' required: - results ServiceCreateRequest: @@ -10952,13 +10952,13 @@ components: schema: type: integer minimum: 1 - CronName: + ScheduleName: name: name in: path required: true description: > - Cron entry name. Must contain only alphanumeric characters, underscores, - and hyphens. + Scheduled entry name. Must contain only alphanumeric characters, + underscores, and hyphens. x-oapi-codegen-extra-tags: validate: required,min=1 schema: @@ -11095,7 +11095,7 @@ x-tagGroups: - Process_Management_API_process_operations - name: Schedule Management API tags: - - Schedule_Management_API_cron_operations + - Schedule_Management_API_schedule_operations - name: Service Management API tags: - Service_Management_API_service_operations diff --git a/ui/src/sdk/gen/schedule-management-api-schedule-operations/schedule-management-api-schedule-operations.ts b/ui/src/sdk/gen/schedule-management-api-schedule-operations/schedule-management-api-schedule-operations.ts new file mode 100644 index 000000000..d40405c51 --- /dev/null +++ b/ui/src/sdk/gen/schedule-management-api-schedule-operations/schedule-management-api-schedule-operations.ts @@ -0,0 +1,339 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { + ErrorResponse, + ScheduleCollectionResponse, + ScheduleCreateRequest, + ScheduleCreateResponse, + ScheduleDeleteResponse, + ScheduleGetResponse, + ScheduleUpdateRequest, + ScheduleUpdateResponse +} from '../schemas'; + +import { apiFetch } from '../../fetch'; + +/** + * List all scheduled entries on the target node. + + * @summary List all scheduled entries + */ +export type getNodeScheduleResponse200 = { + data: ScheduleCollectionResponse + status: 200 +} + +export type getNodeScheduleResponse400 = { + data: ErrorResponse + status: 400 +} + +export type getNodeScheduleResponse401 = { + data: ErrorResponse + status: 401 +} + +export type getNodeScheduleResponse403 = { + data: ErrorResponse + status: 403 +} + +export type getNodeScheduleResponse500 = { + data: ErrorResponse + status: 500 +} + +export type getNodeScheduleResponseSuccess = (getNodeScheduleResponse200) & { + headers: Headers; +}; +export type getNodeScheduleResponseError = (getNodeScheduleResponse400 | getNodeScheduleResponse401 | getNodeScheduleResponse403 | getNodeScheduleResponse500) & { + headers: Headers; +}; + +export type getNodeScheduleResponse = (getNodeScheduleResponseSuccess | getNodeScheduleResponseError) + +export const getGetNodeScheduleUrl = (hostname: string,) => { + + + + + return `/api/node/${hostname}/schedule` +} + +export const getNodeSchedule = async (hostname: string, options?: RequestInit): Promise => { + + return apiFetch(getGetNodeScheduleUrl(hostname), + { + ...options, + method: 'GET' + + + } +);} + + +/** + * Create a new scheduled entry on the target node. + + * @summary Create a scheduled entry + */ +export type postNodeScheduleResponse200 = { + data: ScheduleCreateResponse + status: 200 +} + +export type postNodeScheduleResponse400 = { + data: ErrorResponse + status: 400 +} + +export type postNodeScheduleResponse401 = { + data: ErrorResponse + status: 401 +} + +export type postNodeScheduleResponse403 = { + data: ErrorResponse + status: 403 +} + +export type postNodeScheduleResponse500 = { + data: ErrorResponse + status: 500 +} + +export type postNodeScheduleResponseSuccess = (postNodeScheduleResponse200) & { + headers: Headers; +}; +export type postNodeScheduleResponseError = (postNodeScheduleResponse400 | postNodeScheduleResponse401 | postNodeScheduleResponse403 | postNodeScheduleResponse500) & { + headers: Headers; +}; + +export type postNodeScheduleResponse = (postNodeScheduleResponseSuccess | postNodeScheduleResponseError) + +export const getPostNodeScheduleUrl = (hostname: string,) => { + + + + + return `/api/node/${hostname}/schedule` +} + +export const postNodeSchedule = async (hostname: string, + scheduleCreateRequest: ScheduleCreateRequest, options?: RequestInit): Promise => { + + return apiFetch(getPostNodeScheduleUrl(hostname), + { + ...options, + method: 'POST', + headers: { 'Content-Type': 'application/json', ...options?.headers }, + body: JSON.stringify( + scheduleCreateRequest,) + } +);} + + +/** + * Get a specific scheduled entry by name on the target node. + + * @summary Get a scheduled entry + */ +export type getNodeScheduleByNameResponse200 = { + data: ScheduleGetResponse + status: 200 +} + +export type getNodeScheduleByNameResponse400 = { + data: ErrorResponse + status: 400 +} + +export type getNodeScheduleByNameResponse401 = { + data: ErrorResponse + status: 401 +} + +export type getNodeScheduleByNameResponse403 = { + data: ErrorResponse + status: 403 +} + +export type getNodeScheduleByNameResponse404 = { + data: ErrorResponse + status: 404 +} + +export type getNodeScheduleByNameResponse500 = { + data: ErrorResponse + status: 500 +} + +export type getNodeScheduleByNameResponseSuccess = (getNodeScheduleByNameResponse200) & { + headers: Headers; +}; +export type getNodeScheduleByNameResponseError = (getNodeScheduleByNameResponse400 | getNodeScheduleByNameResponse401 | getNodeScheduleByNameResponse403 | getNodeScheduleByNameResponse404 | getNodeScheduleByNameResponse500) & { + headers: Headers; +}; + +export type getNodeScheduleByNameResponse = (getNodeScheduleByNameResponseSuccess | getNodeScheduleByNameResponseError) + +export const getGetNodeScheduleByNameUrl = (hostname: string, + name: string,) => { + + + + + return `/api/node/${hostname}/schedule/${name}` +} + +export const getNodeScheduleByName = async (hostname: string, + name: string, options?: RequestInit): Promise => { + + return apiFetch(getGetNodeScheduleByNameUrl(hostname,name), + { + ...options, + method: 'GET' + + + } +);} + + +/** + * Update an existing scheduled entry on the target node. + + * @summary Update a scheduled entry + */ +export type putNodeScheduleResponse200 = { + data: ScheduleUpdateResponse + status: 200 +} + +export type putNodeScheduleResponse400 = { + data: ErrorResponse + status: 400 +} + +export type putNodeScheduleResponse401 = { + data: ErrorResponse + status: 401 +} + +export type putNodeScheduleResponse403 = { + data: ErrorResponse + status: 403 +} + +export type putNodeScheduleResponse404 = { + data: ErrorResponse + status: 404 +} + +export type putNodeScheduleResponse500 = { + data: ErrorResponse + status: 500 +} + +export type putNodeScheduleResponseSuccess = (putNodeScheduleResponse200) & { + headers: Headers; +}; +export type putNodeScheduleResponseError = (putNodeScheduleResponse400 | putNodeScheduleResponse401 | putNodeScheduleResponse403 | putNodeScheduleResponse404 | putNodeScheduleResponse500) & { + headers: Headers; +}; + +export type putNodeScheduleResponse = (putNodeScheduleResponseSuccess | putNodeScheduleResponseError) + +export const getPutNodeScheduleUrl = (hostname: string, + name: string,) => { + + + + + return `/api/node/${hostname}/schedule/${name}` +} + +export const putNodeSchedule = async (hostname: string, + name: string, + scheduleUpdateRequest: ScheduleUpdateRequest, options?: RequestInit): Promise => { + + return apiFetch(getPutNodeScheduleUrl(hostname,name), + { + ...options, + method: 'PUT', + headers: { 'Content-Type': 'application/json', ...options?.headers }, + body: JSON.stringify( + scheduleUpdateRequest,) + } +);} + + +/** + * Delete a scheduled entry from the target node. + + * @summary Delete a scheduled entry + */ +export type deleteNodeScheduleResponse200 = { + data: ScheduleDeleteResponse + status: 200 +} + +export type deleteNodeScheduleResponse400 = { + data: ErrorResponse + status: 400 +} + +export type deleteNodeScheduleResponse401 = { + data: ErrorResponse + status: 401 +} + +export type deleteNodeScheduleResponse403 = { + data: ErrorResponse + status: 403 +} + +export type deleteNodeScheduleResponse404 = { + data: ErrorResponse + status: 404 +} + +export type deleteNodeScheduleResponse500 = { + data: ErrorResponse + status: 500 +} + +export type deleteNodeScheduleResponseSuccess = (deleteNodeScheduleResponse200) & { + headers: Headers; +}; +export type deleteNodeScheduleResponseError = (deleteNodeScheduleResponse400 | deleteNodeScheduleResponse401 | deleteNodeScheduleResponse403 | deleteNodeScheduleResponse404 | deleteNodeScheduleResponse500) & { + headers: Headers; +}; + +export type deleteNodeScheduleResponse = (deleteNodeScheduleResponseSuccess | deleteNodeScheduleResponseError) + +export const getDeleteNodeScheduleUrl = (hostname: string, + name: string,) => { + + + + + return `/api/node/${hostname}/schedule/${name}` +} + +export const deleteNodeSchedule = async (hostname: string, + name: string, options?: RequestInit): Promise => { + + return apiFetch(getDeleteNodeScheduleUrl(hostname,name), + { + ...options, + method: 'DELETE' + + + } +);} + + diff --git a/ui/src/sdk/gen/schemas/index.ts b/ui/src/sdk/gen/schemas/index.ts index 7b52a8cd9..69b18617e 100644 --- a/ui/src/sdk/gen/schemas/index.ts +++ b/ui/src/sdk/gen/schemas/index.ts @@ -36,23 +36,6 @@ export * from './componentHealth'; export * from './consumerDetail'; export * from './consumerStats'; export * from './createJobResponse'; -export * from './cronCollectionResponse'; -export * from './cronCreateRequest'; -export * from './cronCreateRequestContentType'; -export * from './cronCreateRequestInterval'; -export * from './cronCreateRequestVars'; -export * from './cronCreateResponse'; -export * from './cronDeleteResponse'; -export * from './cronEntry'; -export * from './cronEntryInterval'; -export * from './cronEntryStatus'; -export * from './cronGetResponse'; -export * from './cronMutationResult'; -export * from './cronMutationResultStatus'; -export * from './cronUpdateRequest'; -export * from './cronUpdateRequestContentType'; -export * from './cronUpdateRequestVars'; -export * from './cronUpdateResponse'; export * from './deleteNodeContainerDockerByIDParams'; export * from './deleteNodeContainerDockerImageParams'; export * from './diskCollectionResponse'; @@ -253,6 +236,23 @@ export * from './routeMutationEntry'; export * from './routeMutationEntryStatus'; export * from './routeMutationResponse'; export * from './routeResponse'; +export * from './scheduleCollectionResponse'; +export * from './scheduleCreateRequest'; +export * from './scheduleCreateRequestContentType'; +export * from './scheduleCreateRequestInterval'; +export * from './scheduleCreateRequestVars'; +export * from './scheduleCreateResponse'; +export * from './scheduleDeleteResponse'; +export * from './scheduleEntry'; +export * from './scheduleEntryInterval'; +export * from './scheduleEntryStatus'; +export * from './scheduleGetResponse'; +export * from './scheduleMutationResult'; +export * from './scheduleMutationResultStatus'; +export * from './scheduleUpdateRequest'; +export * from './scheduleUpdateRequestContentType'; +export * from './scheduleUpdateRequestVars'; +export * from './scheduleUpdateResponse'; export * from './serviceCreateRequest'; export * from './serviceGetEntry'; export * from './serviceGetEntryStatus'; diff --git a/ui/src/sdk/gen/schemas/scheduleCollectionResponse.ts b/ui/src/sdk/gen/schemas/scheduleCollectionResponse.ts new file mode 100644 index 000000000..2d6275d55 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCollectionResponse.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleEntry } from './scheduleEntry'; + +export interface ScheduleCollectionResponse { + /** The job ID used to process this request. */ + job_id?: string; + results: ScheduleEntry[]; +} diff --git a/ui/src/sdk/gen/schemas/scheduleCreateRequest.ts b/ui/src/sdk/gen/schemas/scheduleCreateRequest.ts new file mode 100644 index 000000000..75b6b01e2 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCreateRequest.ts @@ -0,0 +1,33 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleCreateRequestContentType } from './scheduleCreateRequestContentType'; +import type { ScheduleCreateRequestInterval } from './scheduleCreateRequestInterval'; +import type { ScheduleCreateRequestVars } from './scheduleCreateRequestVars'; + +export interface ScheduleCreateRequest { + /** Name for the scheduled entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. + */ + name: string; + /** Name of the uploaded file in the object store to deploy as the scheduled entry content. + */ + object: string; + /** Cron schedule expression (e.g., "*\/5 * * * *"). Mutually exclusive with interval — provide exactly one. + */ + schedule?: string; + /** Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. + */ + interval?: ScheduleCreateRequestInterval; + /** User to run the command as. Only applies when using schedule (cron.d entries include a user field). + */ + user?: string; + /** Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. + */ + content_type?: ScheduleCreateRequestContentType; + /** Template variables. Only used when content_type is "template". + */ + vars?: ScheduleCreateRequestVars; +} diff --git a/ui/src/sdk/gen/schemas/scheduleCreateRequestContentType.ts b/ui/src/sdk/gen/schemas/scheduleCreateRequestContentType.ts new file mode 100644 index 000000000..bca524a10 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCreateRequestContentType.ts @@ -0,0 +1,18 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. + + */ +export type ScheduleCreateRequestContentType = typeof ScheduleCreateRequestContentType[keyof typeof ScheduleCreateRequestContentType]; + + +export const ScheduleCreateRequestContentType = { + raw: 'raw', + template: 'template', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleCreateRequestInterval.ts b/ui/src/sdk/gen/schemas/scheduleCreateRequestInterval.ts new file mode 100644 index 000000000..44ca690f1 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCreateRequestInterval.ts @@ -0,0 +1,20 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. + + */ +export type ScheduleCreateRequestInterval = typeof ScheduleCreateRequestInterval[keyof typeof ScheduleCreateRequestInterval]; + + +export const ScheduleCreateRequestInterval = { + hourly: 'hourly', + daily: 'daily', + weekly: 'weekly', + monthly: 'monthly', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleCreateRequestVars.ts b/ui/src/sdk/gen/schemas/scheduleCreateRequestVars.ts new file mode 100644 index 000000000..3c969fe62 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCreateRequestVars.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Template variables. Only used when content_type is "template". + + */ +export type ScheduleCreateRequestVars = { [key: string]: unknown }; diff --git a/ui/src/sdk/gen/schemas/scheduleCreateResponse.ts b/ui/src/sdk/gen/schemas/scheduleCreateResponse.ts new file mode 100644 index 000000000..f7fd793fb --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleCreateResponse.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleMutationResult } from './scheduleMutationResult'; + +export interface ScheduleCreateResponse { + /** The job ID used to process this request. */ + job_id?: string; + results: ScheduleMutationResult[]; +} diff --git a/ui/src/sdk/gen/schemas/scheduleDeleteResponse.ts b/ui/src/sdk/gen/schemas/scheduleDeleteResponse.ts new file mode 100644 index 000000000..b868b3040 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleDeleteResponse.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleMutationResult } from './scheduleMutationResult'; + +export interface ScheduleDeleteResponse { + /** The job ID used to process this request. */ + job_id?: string; + results: ScheduleMutationResult[]; +} diff --git a/ui/src/sdk/gen/schemas/scheduleEntry.ts b/ui/src/sdk/gen/schemas/scheduleEntry.ts new file mode 100644 index 000000000..db1877bad --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleEntry.ts @@ -0,0 +1,35 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleEntryInterval } from './scheduleEntryInterval'; +import type { ScheduleEntryStatus } from './scheduleEntryStatus'; + +/** + * A scheduled entry. + */ +export interface ScheduleEntry { + /** Hostname of the agent that reported this entry. */ + hostname: string; + /** The status of the operation for this host. */ + status: ScheduleEntryStatus; + /** Scheduled entry name. */ + name?: string; + /** Object store name for the deployed content. */ + object?: string; + /** Cron schedule expression. Present for /etc/cron.d/ entries. + */ + schedule?: string; + /** Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. + */ + interval?: ScheduleEntryInterval; + /** Where the entry lives: "cron.d", "hourly", "daily", "weekly", or "monthly". + */ + source?: string; + /** User the scheduled entry runs as. */ + user?: string; + /** Error message if the agent failed to retrieve this entry. */ + error?: string; +} diff --git a/ui/src/sdk/gen/schemas/scheduleEntryInterval.ts b/ui/src/sdk/gen/schemas/scheduleEntryInterval.ts new file mode 100644 index 000000000..d6583b9b7 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleEntryInterval.ts @@ -0,0 +1,20 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. + + */ +export type ScheduleEntryInterval = typeof ScheduleEntryInterval[keyof typeof ScheduleEntryInterval]; + + +export const ScheduleEntryInterval = { + hourly: 'hourly', + daily: 'daily', + weekly: 'weekly', + monthly: 'monthly', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleEntryStatus.ts b/ui/src/sdk/gen/schemas/scheduleEntryStatus.ts new file mode 100644 index 000000000..7eaa9bf1f --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleEntryStatus.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * The status of the operation for this host. + */ +export type ScheduleEntryStatus = typeof ScheduleEntryStatus[keyof typeof ScheduleEntryStatus]; + + +export const ScheduleEntryStatus = { + ok: 'ok', + failed: 'failed', + skipped: 'skipped', + timeout: 'timeout', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleGetResponse.ts b/ui/src/sdk/gen/schemas/scheduleGetResponse.ts new file mode 100644 index 000000000..adb118bcb --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleGetResponse.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleEntry } from './scheduleEntry'; + +/** + * Collection response for a single scheduled entry get operation. + */ +export interface ScheduleGetResponse { + /** The job ID used to process this request. */ + job_id?: string; + results: ScheduleEntry[]; +} diff --git a/ui/src/sdk/gen/schemas/scheduleMutationResult.ts b/ui/src/sdk/gen/schemas/scheduleMutationResult.ts new file mode 100644 index 000000000..5a458b2ef --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleMutationResult.ts @@ -0,0 +1,23 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleMutationResultStatus } from './scheduleMutationResultStatus'; + +/** + * Result of a cron create, update, or delete operation for one host. + */ +export interface ScheduleMutationResult { + /** Hostname of the agent that processed this operation. */ + hostname: string; + /** The status of the operation for this host. */ + status: ScheduleMutationResultStatus; + /** Scheduled entry name. */ + name?: string; + /** Whether the operation modified system state. */ + changed?: boolean; + /** Error message if the agent failed. */ + error?: string; +} diff --git a/ui/src/sdk/gen/schemas/scheduleMutationResultStatus.ts b/ui/src/sdk/gen/schemas/scheduleMutationResultStatus.ts new file mode 100644 index 000000000..5d8f17815 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleMutationResultStatus.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * The status of the operation for this host. + */ +export type ScheduleMutationResultStatus = typeof ScheduleMutationResultStatus[keyof typeof ScheduleMutationResultStatus]; + + +export const ScheduleMutationResultStatus = { + ok: 'ok', + failed: 'failed', + skipped: 'skipped', + timeout: 'timeout', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleUpdateRequest.ts b/ui/src/sdk/gen/schemas/scheduleUpdateRequest.ts new file mode 100644 index 000000000..54228c271 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleUpdateRequest.ts @@ -0,0 +1,25 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleUpdateRequestContentType } from './scheduleUpdateRequestContentType'; +import type { ScheduleUpdateRequestVars } from './scheduleUpdateRequestVars'; + +export interface ScheduleUpdateRequest { + /** New object to deploy (redeploy with updated content). + */ + object?: string; + /** Cron schedule expression (e.g., "*\/5 * * * *"). + */ + schedule?: string; + /** User to run the command as. */ + user?: string; + /** Content type: "raw" or "template". + */ + content_type?: ScheduleUpdateRequestContentType; + /** Template variables. + */ + vars?: ScheduleUpdateRequestVars; +} diff --git a/ui/src/sdk/gen/schemas/scheduleUpdateRequestContentType.ts b/ui/src/sdk/gen/schemas/scheduleUpdateRequestContentType.ts new file mode 100644 index 000000000..a33cf737b --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleUpdateRequestContentType.ts @@ -0,0 +1,18 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Content type: "raw" or "template". + + */ +export type ScheduleUpdateRequestContentType = typeof ScheduleUpdateRequestContentType[keyof typeof ScheduleUpdateRequestContentType]; + + +export const ScheduleUpdateRequestContentType = { + raw: 'raw', + template: 'template', +} as const; diff --git a/ui/src/sdk/gen/schemas/scheduleUpdateRequestVars.ts b/ui/src/sdk/gen/schemas/scheduleUpdateRequestVars.ts new file mode 100644 index 000000000..ae298a07b --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleUpdateRequestVars.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ + +/** + * Template variables. + + */ +export type ScheduleUpdateRequestVars = { [key: string]: unknown }; diff --git a/ui/src/sdk/gen/schemas/scheduleUpdateResponse.ts b/ui/src/sdk/gen/schemas/scheduleUpdateResponse.ts new file mode 100644 index 000000000..1fb6e4464 --- /dev/null +++ b/ui/src/sdk/gen/schemas/scheduleUpdateResponse.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval 🍺 + * Do not edit manually. + * Agent Management API + * OpenAPI spec version: 1.0.0 + */ +import type { ScheduleMutationResult } from './scheduleMutationResult'; + +export interface ScheduleUpdateResponse { + /** The job ID used to process this request. */ + job_id?: string; + results: ScheduleMutationResult[]; +} From a8e2494a0c35862f5feef0c5deb23a08741499e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 1 Oct 2026 13:15:58 -0700 Subject: [PATCH 2/4] refactor(ui): regenerate the client and follow the schedule name The spec change renamed the schedule operations and schemas, so the generated UI client had to be regenerated. orval writes new files but does not delete the ones it no longer produces, which left the old schedule-management-api-cron-operations module and twenty cron*.ts schemas beside the new ones. Both sets exported the same shapes and the build broke on the stale half. The three hand-written components follow: cron-picker, cron-block and cron-delete-block are named for the resource rather than the driver, like every other component in that directory. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FuKUsHFG1EqZXamffh9M2c --- ui/src/components/domain/result-card.tsx | 30 +- .../{cron-block.tsx => schedule-block.tsx} | 6 +- ...te-block.tsx => schedule-delete-block.tsx} | 10 +- .../{cron-picker.tsx => schedule-picker.tsx} | 14 +- ui/src/pages/configure.tsx | 34 +- ...schedule-management-api-cron-operations.ts | 339 ------------------ .../sdk/gen/schemas/cronCollectionResponse.ts | 13 - ui/src/sdk/gen/schemas/cronCreateRequest.ts | 33 -- .../schemas/cronCreateRequestContentType.ts | 18 - .../gen/schemas/cronCreateRequestInterval.ts | 20 -- .../sdk/gen/schemas/cronCreateRequestVars.ts | 12 - ui/src/sdk/gen/schemas/cronCreateResponse.ts | 13 - ui/src/sdk/gen/schemas/cronDeleteResponse.ts | 13 - ui/src/sdk/gen/schemas/cronEntry.ts | 35 -- ui/src/sdk/gen/schemas/cronEntryInterval.ts | 20 -- ui/src/sdk/gen/schemas/cronEntryStatus.ts | 19 - ui/src/sdk/gen/schemas/cronGetResponse.ts | 16 - ui/src/sdk/gen/schemas/cronMutationResult.ts | 23 -- .../gen/schemas/cronMutationResultStatus.ts | 19 - ui/src/sdk/gen/schemas/cronUpdateRequest.ts | 25 -- .../schemas/cronUpdateRequestContentType.ts | 18 - .../sdk/gen/schemas/cronUpdateRequestVars.ts | 12 - ui/src/sdk/gen/schemas/cronUpdateResponse.ts | 13 - 23 files changed, 47 insertions(+), 708 deletions(-) rename ui/src/components/domain/{cron-block.tsx => schedule-block.tsx} (96%) rename ui/src/components/domain/{cron-delete-block.tsx => schedule-delete-block.tsx} (79%) rename ui/src/components/domain/{cron-picker.tsx => schedule-picker.tsx} (85%) delete mode 100644 ui/src/sdk/gen/schedule-management-api-cron-operations/schedule-management-api-cron-operations.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCollectionResponse.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCreateRequest.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCreateRequestContentType.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCreateRequestInterval.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCreateRequestVars.ts delete mode 100644 ui/src/sdk/gen/schemas/cronCreateResponse.ts delete mode 100644 ui/src/sdk/gen/schemas/cronDeleteResponse.ts delete mode 100644 ui/src/sdk/gen/schemas/cronEntry.ts delete mode 100644 ui/src/sdk/gen/schemas/cronEntryInterval.ts delete mode 100644 ui/src/sdk/gen/schemas/cronEntryStatus.ts delete mode 100644 ui/src/sdk/gen/schemas/cronGetResponse.ts delete mode 100644 ui/src/sdk/gen/schemas/cronMutationResult.ts delete mode 100644 ui/src/sdk/gen/schemas/cronMutationResultStatus.ts delete mode 100644 ui/src/sdk/gen/schemas/cronUpdateRequest.ts delete mode 100644 ui/src/sdk/gen/schemas/cronUpdateRequestContentType.ts delete mode 100644 ui/src/sdk/gen/schemas/cronUpdateRequestVars.ts delete mode 100644 ui/src/sdk/gen/schemas/cronUpdateResponse.ts diff --git a/ui/src/components/domain/result-card.tsx b/ui/src/components/domain/result-card.tsx index 3e875ff2c..d356b0cc5 100644 --- a/ui/src/components/domain/result-card.tsx +++ b/ui/src/components/domain/result-card.tsx @@ -10,7 +10,7 @@ import { import { SearchBox } from "@/components/ui/search-box"; import type { CommandResultItem, - CronMutationResult, + ScheduleMutationResult, DockerResponse, FileDeployResult, FileInfo, @@ -361,7 +361,7 @@ function ListSearchBar({ } // Cron list -function CronListResult({ +function ScheduleListResult({ data, onAction, }: { @@ -369,7 +369,7 @@ function CronListResult({ onAction?: (action: string, name: string) => void; }) { const { search, setSearch } = useListSearch(); - type CronListEntry = { + type ScheduleListEntry = { hostname?: string; status?: string; name?: string; @@ -378,8 +378,8 @@ function CronListResult({ source?: string; error?: string; }; - const entries = data.results as CronListEntry[]; - const byHost = new Map(); + const entries = data.results as ScheduleListEntry[]; + const byHost = new Map(); for (const e of entries) { const h = e.hostname ?? "unknown"; if (!byHost.has(h)) byHost.set(h, []); @@ -403,10 +403,10 @@ function CronListResult({ const isSkipped = hostEntry?.status === "skipped"; const hostError = !isSkipped && items.find((e) => e.error && !e.name); const allCronEntries = isSkipped ? [] : items.filter((e) => e.name); - const cronEntries = allCronEntries.filter((e) => + const scheduleEntries = allCronEntries.filter((e) => matches(search, e.name, e.schedule, e.object, e.source), ); - if (search && cronEntries.length === 0 && !isSkipped && !hostError) + if (search && scheduleEntries.length === 0 && !isSkipped && !hostError) return null; return (
{hostError && ( - {(hostError as CronListEntry).error} + {(hostError as ScheduleListEntry).error} )} - {cronEntries.map((e, i) => ( + {scheduleEntries.map((e, i) => (
; + return ; } // Docker create/start/stop/delete/pull/rm-image — action results @@ -1842,7 +1842,7 @@ export function ResultCard({ type, result, onAction }: ResultCardProps) { // Cron get — per-host single entry if (type === "cron-get" && Array.isArray(data.results)) { - type CronGetEntry = { + type ScheduleGetEntry = { hostname?: string; status?: string; name?: string; @@ -1850,7 +1850,7 @@ export function ResultCard({ type, result, onAction }: ResultCardProps) { object?: string; error?: string; }; - const entries = data.results as CronGetEntry[]; + const entries = data.results as ScheduleGetEntry[]; return ( ; onChange: (data: Record) => void; onStatusChange: (status: BlockStatus) => void; upstreamObjects?: string[]; } -export function CronBlock({ +export function ScheduleBlock({ data, onChange, onStatusChange, upstreamObjects = [], -}: CronBlockProps) { +}: ScheduleBlockProps) { const name = (data.name as string) || ""; const schedule = (data.schedule as string) || ""; const object = (data.object as string) || ""; diff --git a/ui/src/components/domain/cron-delete-block.tsx b/ui/src/components/domain/schedule-delete-block.tsx similarity index 79% rename from ui/src/components/domain/cron-delete-block.tsx rename to ui/src/components/domain/schedule-delete-block.tsx index 7030ed14f..a4dc7c575 100644 --- a/ui/src/components/domain/cron-delete-block.tsx +++ b/ui/src/components/domain/schedule-delete-block.tsx @@ -1,18 +1,18 @@ import { useEffect, useRef } from "react"; -import { CronPicker } from "@/components/domain/cron-picker"; +import { SchedulePicker } from "@/components/domain/schedule-picker"; import type { BlockStatus } from "@/hooks/use-stack"; -interface CronDeleteBlockProps { +interface ScheduleDeleteBlockProps { data: Record; onChange: (data: Record) => void; onStatusChange: (status: BlockStatus) => void; } -export function CronDeleteBlock({ +export function ScheduleDeleteBlock({ data, onChange, onStatusChange, -}: CronDeleteBlockProps) { +}: ScheduleDeleteBlockProps) { const name = (data.name as string) || ""; const prevStatus = useRef(null); @@ -25,7 +25,7 @@ export function CronDeleteBlock({ }, [name, onStatusChange]); return ( - void; } -export function CronPicker({ id, label, value, onChange }: CronPickerProps) { - const [entries, setEntries] = useState([]); +export function SchedulePicker({ id, label, value, onChange }: SchedulePickerProps) { + const [entries, setEntries] = useState([]); const [open, setOpen] = useState(false); const [loading, setLoading] = useState(true); const ref = useRef(null); @@ -29,9 +29,9 @@ export function CronPicker({ id, label, value, onChange }: CronPickerProps) { let mounted = true; const fetch = async () => { try { - const result = await getNodeScheduleCron("_all"); + const result = await getNodeSchedule("_all"); if (mounted && result.status === 200) { - setEntries((result.data as CronCollectionResponse).results ?? []); + setEntries((result.data as ScheduleCollectionResponse).results ?? []); } } catch { // silent diff --git a/ui/src/pages/configure.tsx b/ui/src/pages/configure.tsx index 20678b21d..8bbbe8809 100644 --- a/ui/src/pages/configure.tsx +++ b/ui/src/pages/configure.tsx @@ -5,14 +5,14 @@ import { ContentArea } from "@/components/layout/content-area"; import { BlockCard } from "@/components/domain/block-card"; import { BlockStack } from "@/components/domain/block-stack"; import { ResultCard } from "@/components/domain/result-card"; -import { CronBlock } from "@/components/domain/cron-block"; +import { ScheduleBlock } from "@/components/domain/schedule-block"; import { CommandBlock } from "@/components/domain/command-block"; import { DockerBlock } from "@/components/domain/docker-block"; import { FileBlock } from "@/components/domain/file-block"; import { FileUploadBlock } from "@/components/domain/file-upload-block"; import { SingleInputBlock } from "@/components/domain/single-input-block"; import { FileDeleteBlock } from "@/components/domain/file-delete-block"; -import { CronDeleteBlock } from "@/components/domain/cron-delete-block"; +import { ScheduleDeleteBlock } from "@/components/domain/schedule-delete-block"; import { ContainerActionBlock } from "@/components/domain/container-action-block"; import { DockerExecBlock } from "@/components/domain/docker-exec-block"; import { DnsUpdateBlock } from "@/components/domain/dns-update-block"; @@ -45,12 +45,12 @@ import { useCommands } from "@/hooks/use-commands"; import { useStacks } from "@/hooks/use-stacks"; import { features } from "@/lib/features"; import { - postNodeScheduleCron, - getNodeScheduleCron, - deleteNodeScheduleCron, - getNodeScheduleCronByName, - putNodeScheduleCron, -} from "@/sdk/gen/schedule-management-api-cron-operations/schedule-management-api-cron-operations"; + postNodeSchedule, + getNodeSchedule, + deleteNodeSchedule, + getNodeScheduleByName, + putNodeSchedule, +} from "@/sdk/gen/schedule-management-api-schedule-operations/schedule-management-api-schedule-operations"; import { getNodeService, getNodeServiceByName, @@ -381,7 +381,7 @@ export function Configure() { switch (block.type) { case "cron-create": - result = await postNodeScheduleCron(t, { + result = await postNodeSchedule(t, { name: block.data.name as string, schedule: block.data.schedule as string, object: block.data.object as string, @@ -391,19 +391,19 @@ export function Configure() { }); break; case "cron-list": - result = await getNodeScheduleCron(t); + result = await getNodeSchedule(t); break; case "cron-delete": - result = await deleteNodeScheduleCron(t, block.data.name as string); + result = await deleteNodeSchedule(t, block.data.name as string); break; case "cron-get": - result = await getNodeScheduleCronByName( + result = await getNodeScheduleByName( t, block.data.name as string, ); break; case "cron-update": - result = await putNodeScheduleCron(t, block.data.name as string, { + result = await putNodeSchedule(t, block.data.name as string, { schedule: block.data.schedule as string, object: block.data.object as string, content_type: @@ -1029,7 +1029,7 @@ export function Configure() { switch (block.type) { case "cron-create": return ( - updateBlockData(block.id, data)} onStatusChange={(s: BlockStatus) => setBlockStatus(block.id, s)} @@ -1040,7 +1040,7 @@ export function Configure() { return null; case "cron-delete": return ( - updateBlockData(block.id, data)} onStatusChange={(s: BlockStatus) => setBlockStatus(block.id, s)} @@ -1059,7 +1059,7 @@ export function Configure() { ); case "cron-update": return ( - updateBlockData(block.id, data)} onStatusChange={(s: BlockStatus) => setBlockStatus(block.id, s)} @@ -1614,7 +1614,7 @@ export function Configure() { async (action: string, name: string) => { try { if (action === "cron-delete") { - await deleteNodeScheduleCron("_all", name); + await deleteNodeSchedule("_all", name); } else if (action === "file-delete") { await deleteFileByName(name); } diff --git a/ui/src/sdk/gen/schedule-management-api-cron-operations/schedule-management-api-cron-operations.ts b/ui/src/sdk/gen/schedule-management-api-cron-operations/schedule-management-api-cron-operations.ts deleted file mode 100644 index 59ad2d63e..000000000 --- a/ui/src/sdk/gen/schedule-management-api-cron-operations/schedule-management-api-cron-operations.ts +++ /dev/null @@ -1,339 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { - CronCollectionResponse, - CronCreateRequest, - CronCreateResponse, - CronDeleteResponse, - CronGetResponse, - CronUpdateRequest, - CronUpdateResponse, - ErrorResponse -} from '../schemas'; - -import { apiFetch } from '../../fetch'; - -/** - * List all cron drop-in entries on the target node. - - * @summary List all cron entries - */ -export type getNodeScheduleCronResponse200 = { - data: CronCollectionResponse - status: 200 -} - -export type getNodeScheduleCronResponse400 = { - data: ErrorResponse - status: 400 -} - -export type getNodeScheduleCronResponse401 = { - data: ErrorResponse - status: 401 -} - -export type getNodeScheduleCronResponse403 = { - data: ErrorResponse - status: 403 -} - -export type getNodeScheduleCronResponse500 = { - data: ErrorResponse - status: 500 -} - -export type getNodeScheduleCronResponseSuccess = (getNodeScheduleCronResponse200) & { - headers: Headers; -}; -export type getNodeScheduleCronResponseError = (getNodeScheduleCronResponse400 | getNodeScheduleCronResponse401 | getNodeScheduleCronResponse403 | getNodeScheduleCronResponse500) & { - headers: Headers; -}; - -export type getNodeScheduleCronResponse = (getNodeScheduleCronResponseSuccess | getNodeScheduleCronResponseError) - -export const getGetNodeScheduleCronUrl = (hostname: string,) => { - - - - - return `/api/node/${hostname}/schedule/cron` -} - -export const getNodeScheduleCron = async (hostname: string, options?: RequestInit): Promise => { - - return apiFetch(getGetNodeScheduleCronUrl(hostname), - { - ...options, - method: 'GET' - - - } -);} - - -/** - * Create a new cron drop-in entry on the target node. - - * @summary Create a cron entry - */ -export type postNodeScheduleCronResponse200 = { - data: CronCreateResponse - status: 200 -} - -export type postNodeScheduleCronResponse400 = { - data: ErrorResponse - status: 400 -} - -export type postNodeScheduleCronResponse401 = { - data: ErrorResponse - status: 401 -} - -export type postNodeScheduleCronResponse403 = { - data: ErrorResponse - status: 403 -} - -export type postNodeScheduleCronResponse500 = { - data: ErrorResponse - status: 500 -} - -export type postNodeScheduleCronResponseSuccess = (postNodeScheduleCronResponse200) & { - headers: Headers; -}; -export type postNodeScheduleCronResponseError = (postNodeScheduleCronResponse400 | postNodeScheduleCronResponse401 | postNodeScheduleCronResponse403 | postNodeScheduleCronResponse500) & { - headers: Headers; -}; - -export type postNodeScheduleCronResponse = (postNodeScheduleCronResponseSuccess | postNodeScheduleCronResponseError) - -export const getPostNodeScheduleCronUrl = (hostname: string,) => { - - - - - return `/api/node/${hostname}/schedule/cron` -} - -export const postNodeScheduleCron = async (hostname: string, - cronCreateRequest: CronCreateRequest, options?: RequestInit): Promise => { - - return apiFetch(getPostNodeScheduleCronUrl(hostname), - { - ...options, - method: 'POST', - headers: { 'Content-Type': 'application/json', ...options?.headers }, - body: JSON.stringify( - cronCreateRequest,) - } -);} - - -/** - * Get a specific cron drop-in entry by name on the target node. - - * @summary Get a cron entry - */ -export type getNodeScheduleCronByNameResponse200 = { - data: CronGetResponse - status: 200 -} - -export type getNodeScheduleCronByNameResponse400 = { - data: ErrorResponse - status: 400 -} - -export type getNodeScheduleCronByNameResponse401 = { - data: ErrorResponse - status: 401 -} - -export type getNodeScheduleCronByNameResponse403 = { - data: ErrorResponse - status: 403 -} - -export type getNodeScheduleCronByNameResponse404 = { - data: ErrorResponse - status: 404 -} - -export type getNodeScheduleCronByNameResponse500 = { - data: ErrorResponse - status: 500 -} - -export type getNodeScheduleCronByNameResponseSuccess = (getNodeScheduleCronByNameResponse200) & { - headers: Headers; -}; -export type getNodeScheduleCronByNameResponseError = (getNodeScheduleCronByNameResponse400 | getNodeScheduleCronByNameResponse401 | getNodeScheduleCronByNameResponse403 | getNodeScheduleCronByNameResponse404 | getNodeScheduleCronByNameResponse500) & { - headers: Headers; -}; - -export type getNodeScheduleCronByNameResponse = (getNodeScheduleCronByNameResponseSuccess | getNodeScheduleCronByNameResponseError) - -export const getGetNodeScheduleCronByNameUrl = (hostname: string, - name: string,) => { - - - - - return `/api/node/${hostname}/schedule/cron/${name}` -} - -export const getNodeScheduleCronByName = async (hostname: string, - name: string, options?: RequestInit): Promise => { - - return apiFetch(getGetNodeScheduleCronByNameUrl(hostname,name), - { - ...options, - method: 'GET' - - - } -);} - - -/** - * Update an existing cron drop-in entry on the target node. - - * @summary Update a cron entry - */ -export type putNodeScheduleCronResponse200 = { - data: CronUpdateResponse - status: 200 -} - -export type putNodeScheduleCronResponse400 = { - data: ErrorResponse - status: 400 -} - -export type putNodeScheduleCronResponse401 = { - data: ErrorResponse - status: 401 -} - -export type putNodeScheduleCronResponse403 = { - data: ErrorResponse - status: 403 -} - -export type putNodeScheduleCronResponse404 = { - data: ErrorResponse - status: 404 -} - -export type putNodeScheduleCronResponse500 = { - data: ErrorResponse - status: 500 -} - -export type putNodeScheduleCronResponseSuccess = (putNodeScheduleCronResponse200) & { - headers: Headers; -}; -export type putNodeScheduleCronResponseError = (putNodeScheduleCronResponse400 | putNodeScheduleCronResponse401 | putNodeScheduleCronResponse403 | putNodeScheduleCronResponse404 | putNodeScheduleCronResponse500) & { - headers: Headers; -}; - -export type putNodeScheduleCronResponse = (putNodeScheduleCronResponseSuccess | putNodeScheduleCronResponseError) - -export const getPutNodeScheduleCronUrl = (hostname: string, - name: string,) => { - - - - - return `/api/node/${hostname}/schedule/cron/${name}` -} - -export const putNodeScheduleCron = async (hostname: string, - name: string, - cronUpdateRequest: CronUpdateRequest, options?: RequestInit): Promise => { - - return apiFetch(getPutNodeScheduleCronUrl(hostname,name), - { - ...options, - method: 'PUT', - headers: { 'Content-Type': 'application/json', ...options?.headers }, - body: JSON.stringify( - cronUpdateRequest,) - } -);} - - -/** - * Delete a cron drop-in entry from the target node. - - * @summary Delete a cron entry - */ -export type deleteNodeScheduleCronResponse200 = { - data: CronDeleteResponse - status: 200 -} - -export type deleteNodeScheduleCronResponse400 = { - data: ErrorResponse - status: 400 -} - -export type deleteNodeScheduleCronResponse401 = { - data: ErrorResponse - status: 401 -} - -export type deleteNodeScheduleCronResponse403 = { - data: ErrorResponse - status: 403 -} - -export type deleteNodeScheduleCronResponse404 = { - data: ErrorResponse - status: 404 -} - -export type deleteNodeScheduleCronResponse500 = { - data: ErrorResponse - status: 500 -} - -export type deleteNodeScheduleCronResponseSuccess = (deleteNodeScheduleCronResponse200) & { - headers: Headers; -}; -export type deleteNodeScheduleCronResponseError = (deleteNodeScheduleCronResponse400 | deleteNodeScheduleCronResponse401 | deleteNodeScheduleCronResponse403 | deleteNodeScheduleCronResponse404 | deleteNodeScheduleCronResponse500) & { - headers: Headers; -}; - -export type deleteNodeScheduleCronResponse = (deleteNodeScheduleCronResponseSuccess | deleteNodeScheduleCronResponseError) - -export const getDeleteNodeScheduleCronUrl = (hostname: string, - name: string,) => { - - - - - return `/api/node/${hostname}/schedule/cron/${name}` -} - -export const deleteNodeScheduleCron = async (hostname: string, - name: string, options?: RequestInit): Promise => { - - return apiFetch(getDeleteNodeScheduleCronUrl(hostname,name), - { - ...options, - method: 'DELETE' - - - } -);} - - diff --git a/ui/src/sdk/gen/schemas/cronCollectionResponse.ts b/ui/src/sdk/gen/schemas/cronCollectionResponse.ts deleted file mode 100644 index d95145bea..000000000 --- a/ui/src/sdk/gen/schemas/cronCollectionResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronEntry } from './cronEntry'; - -export interface CronCollectionResponse { - /** The job ID used to process this request. */ - job_id?: string; - results: CronEntry[]; -} diff --git a/ui/src/sdk/gen/schemas/cronCreateRequest.ts b/ui/src/sdk/gen/schemas/cronCreateRequest.ts deleted file mode 100644 index 82482be04..000000000 --- a/ui/src/sdk/gen/schemas/cronCreateRequest.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronCreateRequestContentType } from './cronCreateRequestContentType'; -import type { CronCreateRequestInterval } from './cronCreateRequestInterval'; -import type { CronCreateRequestVars } from './cronCreateRequestVars'; - -export interface CronCreateRequest { - /** Name for the cron drop-in entry. Used as the file name under /etc/cron.d/ or /etc/cron.{interval}/. - */ - name: string; - /** Name of the uploaded file in the object store to deploy as the cron entry content. - */ - object: string; - /** Cron schedule expression (e.g., "*\/5 * * * *"). Mutually exclusive with interval — provide exactly one. - */ - schedule?: string; - /** Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. - */ - interval?: CronCreateRequestInterval; - /** User to run the command as. Only applies when using schedule (cron.d entries include a user field). - */ - user?: string; - /** Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. - */ - content_type?: CronCreateRequestContentType; - /** Template variables. Only used when content_type is "template". - */ - vars?: CronCreateRequestVars; -} diff --git a/ui/src/sdk/gen/schemas/cronCreateRequestContentType.ts b/ui/src/sdk/gen/schemas/cronCreateRequestContentType.ts deleted file mode 100644 index 443195d48..000000000 --- a/ui/src/sdk/gen/schemas/cronCreateRequestContentType.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Content type: "raw" or "template". When "template", the file content is rendered through Go text/template with agent facts and user-supplied vars. - - */ -export type CronCreateRequestContentType = typeof CronCreateRequestContentType[keyof typeof CronCreateRequestContentType]; - - -export const CronCreateRequestContentType = { - raw: 'raw', - template: 'template', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronCreateRequestInterval.ts b/ui/src/sdk/gen/schemas/cronCreateRequestInterval.ts deleted file mode 100644 index 8f4369d20..000000000 --- a/ui/src/sdk/gen/schemas/cronCreateRequestInterval.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Periodic interval (hourly, daily, weekly, monthly). Places the script in /etc/cron.{interval}/. Mutually exclusive with schedule — provide exactly one. - - */ -export type CronCreateRequestInterval = typeof CronCreateRequestInterval[keyof typeof CronCreateRequestInterval]; - - -export const CronCreateRequestInterval = { - hourly: 'hourly', - daily: 'daily', - weekly: 'weekly', - monthly: 'monthly', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronCreateRequestVars.ts b/ui/src/sdk/gen/schemas/cronCreateRequestVars.ts deleted file mode 100644 index 1346741dc..000000000 --- a/ui/src/sdk/gen/schemas/cronCreateRequestVars.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Template variables. Only used when content_type is "template". - - */ -export type CronCreateRequestVars = { [key: string]: unknown }; diff --git a/ui/src/sdk/gen/schemas/cronCreateResponse.ts b/ui/src/sdk/gen/schemas/cronCreateResponse.ts deleted file mode 100644 index 817d5320d..000000000 --- a/ui/src/sdk/gen/schemas/cronCreateResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronMutationResult } from './cronMutationResult'; - -export interface CronCreateResponse { - /** The job ID used to process this request. */ - job_id?: string; - results: CronMutationResult[]; -} diff --git a/ui/src/sdk/gen/schemas/cronDeleteResponse.ts b/ui/src/sdk/gen/schemas/cronDeleteResponse.ts deleted file mode 100644 index f60968970..000000000 --- a/ui/src/sdk/gen/schemas/cronDeleteResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronMutationResult } from './cronMutationResult'; - -export interface CronDeleteResponse { - /** The job ID used to process this request. */ - job_id?: string; - results: CronMutationResult[]; -} diff --git a/ui/src/sdk/gen/schemas/cronEntry.ts b/ui/src/sdk/gen/schemas/cronEntry.ts deleted file mode 100644 index 26503962b..000000000 --- a/ui/src/sdk/gen/schemas/cronEntry.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronEntryInterval } from './cronEntryInterval'; -import type { CronEntryStatus } from './cronEntryStatus'; - -/** - * A cron drop-in entry. - */ -export interface CronEntry { - /** Hostname of the agent that reported this entry. */ - hostname: string; - /** The status of the operation for this host. */ - status: CronEntryStatus; - /** Cron entry name. */ - name?: string; - /** Object store name for the deployed content. */ - object?: string; - /** Cron schedule expression. Present for /etc/cron.d/ entries. - */ - schedule?: string; - /** Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. - */ - interval?: CronEntryInterval; - /** Where the entry lives: "cron.d", "hourly", "daily", "weekly", or "monthly". - */ - source?: string; - /** User the cron entry runs as. */ - user?: string; - /** Error message if the agent failed to retrieve this entry. */ - error?: string; -} diff --git a/ui/src/sdk/gen/schemas/cronEntryInterval.ts b/ui/src/sdk/gen/schemas/cronEntryInterval.ts deleted file mode 100644 index a2090d20a..000000000 --- a/ui/src/sdk/gen/schemas/cronEntryInterval.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Periodic interval (hourly, daily, weekly, monthly). Present for /etc/cron.{interval}/ entries. - - */ -export type CronEntryInterval = typeof CronEntryInterval[keyof typeof CronEntryInterval]; - - -export const CronEntryInterval = { - hourly: 'hourly', - daily: 'daily', - weekly: 'weekly', - monthly: 'monthly', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronEntryStatus.ts b/ui/src/sdk/gen/schemas/cronEntryStatus.ts deleted file mode 100644 index 75374cf00..000000000 --- a/ui/src/sdk/gen/schemas/cronEntryStatus.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * The status of the operation for this host. - */ -export type CronEntryStatus = typeof CronEntryStatus[keyof typeof CronEntryStatus]; - - -export const CronEntryStatus = { - ok: 'ok', - failed: 'failed', - skipped: 'skipped', - timeout: 'timeout', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronGetResponse.ts b/ui/src/sdk/gen/schemas/cronGetResponse.ts deleted file mode 100644 index d8da8d771..000000000 --- a/ui/src/sdk/gen/schemas/cronGetResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronEntry } from './cronEntry'; - -/** - * Collection response for a single cron entry get operation. - */ -export interface CronGetResponse { - /** The job ID used to process this request. */ - job_id?: string; - results: CronEntry[]; -} diff --git a/ui/src/sdk/gen/schemas/cronMutationResult.ts b/ui/src/sdk/gen/schemas/cronMutationResult.ts deleted file mode 100644 index 2d0f7f5de..000000000 --- a/ui/src/sdk/gen/schemas/cronMutationResult.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronMutationResultStatus } from './cronMutationResultStatus'; - -/** - * Result of a cron create, update, or delete operation for one host. - */ -export interface CronMutationResult { - /** Hostname of the agent that processed this operation. */ - hostname: string; - /** The status of the operation for this host. */ - status: CronMutationResultStatus; - /** Cron entry name. */ - name?: string; - /** Whether the operation modified system state. */ - changed?: boolean; - /** Error message if the agent failed. */ - error?: string; -} diff --git a/ui/src/sdk/gen/schemas/cronMutationResultStatus.ts b/ui/src/sdk/gen/schemas/cronMutationResultStatus.ts deleted file mode 100644 index a4261786c..000000000 --- a/ui/src/sdk/gen/schemas/cronMutationResultStatus.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * The status of the operation for this host. - */ -export type CronMutationResultStatus = typeof CronMutationResultStatus[keyof typeof CronMutationResultStatus]; - - -export const CronMutationResultStatus = { - ok: 'ok', - failed: 'failed', - skipped: 'skipped', - timeout: 'timeout', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronUpdateRequest.ts b/ui/src/sdk/gen/schemas/cronUpdateRequest.ts deleted file mode 100644 index ab0b418b5..000000000 --- a/ui/src/sdk/gen/schemas/cronUpdateRequest.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronUpdateRequestContentType } from './cronUpdateRequestContentType'; -import type { CronUpdateRequestVars } from './cronUpdateRequestVars'; - -export interface CronUpdateRequest { - /** New object to deploy (redeploy with updated content). - */ - object?: string; - /** Cron schedule expression (e.g., "*\/5 * * * *"). - */ - schedule?: string; - /** User to run the command as. */ - user?: string; - /** Content type: "raw" or "template". - */ - content_type?: CronUpdateRequestContentType; - /** Template variables. - */ - vars?: CronUpdateRequestVars; -} diff --git a/ui/src/sdk/gen/schemas/cronUpdateRequestContentType.ts b/ui/src/sdk/gen/schemas/cronUpdateRequestContentType.ts deleted file mode 100644 index c648b7cc2..000000000 --- a/ui/src/sdk/gen/schemas/cronUpdateRequestContentType.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Content type: "raw" or "template". - - */ -export type CronUpdateRequestContentType = typeof CronUpdateRequestContentType[keyof typeof CronUpdateRequestContentType]; - - -export const CronUpdateRequestContentType = { - raw: 'raw', - template: 'template', -} as const; diff --git a/ui/src/sdk/gen/schemas/cronUpdateRequestVars.ts b/ui/src/sdk/gen/schemas/cronUpdateRequestVars.ts deleted file mode 100644 index 887b01c8b..000000000 --- a/ui/src/sdk/gen/schemas/cronUpdateRequestVars.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ - -/** - * Template variables. - - */ -export type CronUpdateRequestVars = { [key: string]: unknown }; diff --git a/ui/src/sdk/gen/schemas/cronUpdateResponse.ts b/ui/src/sdk/gen/schemas/cronUpdateResponse.ts deleted file mode 100644 index 1916f29c6..000000000 --- a/ui/src/sdk/gen/schemas/cronUpdateResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Generated by orval 🍺 - * Do not edit manually. - * Agent Management API - * OpenAPI spec version: 1.0.0 - */ -import type { CronMutationResult } from './cronMutationResult'; - -export interface CronUpdateResponse { - /** The job ID used to process this request. */ - job_id?: string; - results: CronMutationResult[]; -} From 55d30de77e059f3f3e39c57d0a0a1f5b15e31f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 1 Oct 2026 13:20:21 -0700 Subject: [PATCH 3/4] style: wrap a line golines flags after the memory rename Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FuKUsHFG1EqZXamffh9M2c --- internal/controller/api/agent/agent_get_public_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/controller/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go index e8a66dc8a..0fbac1195 100644 --- a/internal/controller/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -193,7 +193,11 @@ func (s *AgentGetPublicTestSuite) TestGetAgentDetailsHTTP() { OSInfo: &host.Result{Distribution: "Ubuntu", Version: "24.04"}, Uptime: 5 * time.Hour, LoadAverages: &load.Result{Load1: 0.5, Load5: 0.3, Load15: 0.2}, - MemoryStats: &memory.Result{Total: 8388608, Free: 4194304, Cached: 2097152}, + MemoryStats: &memory.Result{ + Total: 8388608, + Free: 4194304, + Cached: 2097152, + }, }, nil) return mock }, From 250540dffd56832f8e4cf4066666f5d2d6eaded2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=A0=CF=85=CE=B1=CE=B7=20=D7=A0=CF=85=CE=B1=CE=B7=D1=95?= =?UTF-8?q?=CF=83=CE=B7?= Date: Thu, 1 Oct 2026 13:27:52 -0700 Subject: [PATCH 4/4] fix: finish the memory and schedule renames in test files Three classes of reference the sweeps missed, all caught by go vet rather than by go test. The memory package's own _test.go files are package memory_test and refer to the package under test by its import name. The import path was rewritten and the references were not, because the sweep skipped files inside the package's own directory to avoid touching gopsutil's mem. The SDK's Client field is Schedule now, and two tests plus one example still read c.Cron. go test had been reporting these packages as cached passes from before the rename, which is why they looked green locally while CI failed. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FuKUsHFG1EqZXamffh9M2c --- examples/sdk/client/schedule.go | 14 +++++++------- .../node/memory/darwin_get_vm_public_test.go | 12 ++++++------ .../node/memory/debian_get_vm_public_test.go | 12 ++++++------ .../node/memory/linux_get_vm_public_test.go | 6 +++--- pkg/sdk/client/osapi_public_test.go | 2 +- pkg/sdk/client/schedule_public_test.go | 10 +++++----- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/examples/sdk/client/schedule.go b/examples/sdk/client/schedule.go index 2c25541e7..3189a8ae8 100644 --- a/examples/sdk/client/schedule.go +++ b/examples/sdk/client/schedule.go @@ -80,7 +80,7 @@ func main() { // Create a cron entry referencing the uploaded object. // Returns Collection[ScheduleMutationResult] with per-host results. fmt.Println("\n=== Creating cron entry ===") - createResp, err := c.Cron.Create(ctx, target, client.ScheduleCreateOpts{ + createResp, err := c.Schedule.Create(ctx, target, client.ScheduleCreateOpts{ Name: "backup-daily", Schedule: "0 2 * * *", Object: "backup-script", @@ -95,7 +95,7 @@ func main() { // Create a periodic entry (interval-based) referencing an uploaded object. fmt.Println("\n=== Creating periodic cron entry ===") - periodicResp, err := c.Cron.Create(ctx, target, client.ScheduleCreateOpts{ + periodicResp, err := c.Schedule.Create(ctx, target, client.ScheduleCreateOpts{ Name: "logrotate", Interval: "daily", Object: "logrotate-script", @@ -110,7 +110,7 @@ func main() { // List all cron entries. // Returns Collection[ScheduleEntryResult] with per-host entries. fmt.Println("\n=== Listing cron entries ===") - listResp, err := c.Cron.List(ctx, target) + listResp, err := c.Schedule.List(ctx, target) if err != nil { log.Fatalf("list failed: %v", err) } @@ -126,7 +126,7 @@ func main() { // Get a specific entry. // Returns Collection[ScheduleEntryResult] — one result per host. fmt.Println("\n=== Getting cron entry ===") - getResp, err := c.Cron.Get(ctx, target, "backup-daily") + getResp, err := c.Schedule.Get(ctx, target, "backup-daily") if err != nil { log.Fatalf("get failed: %v", err) } @@ -149,7 +149,7 @@ func main() { fmt.Println("Uploaded: backup-script-v2") fmt.Println("\n=== Updating cron entry ===") - updateResp, err := c.Cron.Update(ctx, target, "backup-daily", client.ScheduleUpdateOpts{ + updateResp, err := c.Schedule.Update(ctx, target, "backup-daily", client.ScheduleUpdateOpts{ Schedule: "0 3 * * *", Object: "backup-script-v2", }) @@ -163,7 +163,7 @@ func main() { // Delete the entry. The cron file is removed from disk; file-state KV // tracking is preserved so the undeploy is recorded. fmt.Println("\n=== Deleting cron entry ===") - deleteResp, err := c.Cron.Delete(ctx, target, "backup-daily") + deleteResp, err := c.Schedule.Delete(ctx, target, "backup-daily") if err != nil { log.Fatalf("delete failed: %v", err) } @@ -173,7 +173,7 @@ func main() { // Clean up the periodic entry. fmt.Println("\n=== Cleaning up periodic entry ===") - cleanupResp, err := c.Cron.Delete(ctx, target, "logrotate") + cleanupResp, err := c.Schedule.Delete(ctx, target, "logrotate") if err != nil { log.Fatalf("cleanup failed: %v", err) } diff --git a/internal/provider/node/memory/darwin_get_vm_public_test.go b/internal/provider/node/memory/darwin_get_vm_public_test.go index a99c0172d..12c07e938 100644 --- a/internal/provider/node/memory/darwin_get_vm_public_test.go +++ b/internal/provider/node/memory/darwin_get_vm_public_test.go @@ -42,7 +42,7 @@ func (suite *DarwinGetStatsPublicTestSuite) TestGetStats() { tests := []struct { name string setupMock func() func() (*sysMem.VirtualMemoryStat, error) - validateFunc func(*mem.Result, error) + validateFunc func(*memory.Result, error) }{ { name: "when GetStats Ok", @@ -55,10 +55,10 @@ func (suite *DarwinGetStatsPublicTestSuite) TestGetStats() { }, nil } }, - validateFunc: func(got *mem.Result, err error) { + validateFunc: func(got *memory.Result, err error) { suite.NoError(err) suite.NotNil(got) - suite.Equal(&mem.Result{ + suite.Equal(&memory.Result{ Total: 1024, Free: 512, Cached: 256, @@ -66,13 +66,13 @@ func (suite *DarwinGetStatsPublicTestSuite) TestGetStats() { }, }, { - name: "when mem.VirtualMemory errors", + name: "when memory.VirtualMemory errors", setupMock: func() func() (*sysMem.VirtualMemoryStat, error) { return func() (*sysMem.VirtualMemoryStat, error) { return nil, assert.AnError } }, - validateFunc: func(got *mem.Result, err error) { + validateFunc: func(got *memory.Result, err error) { suite.Error(err) suite.ErrorContains(err, assert.AnError.Error()) suite.Nil(got) @@ -82,7 +82,7 @@ func (suite *DarwinGetStatsPublicTestSuite) TestGetStats() { for _, tc := range tests { suite.Run(tc.name, func() { - darwin := mem.NewDarwinProvider() + darwin := memory.NewDarwinProvider() if tc.setupMock != nil { darwin.VirtualMemoryFn = tc.setupMock() diff --git a/internal/provider/node/memory/debian_get_vm_public_test.go b/internal/provider/node/memory/debian_get_vm_public_test.go index 6d8574b7f..ab31b34d8 100644 --- a/internal/provider/node/memory/debian_get_vm_public_test.go +++ b/internal/provider/node/memory/debian_get_vm_public_test.go @@ -42,7 +42,7 @@ func (suite *DebianGetStatsPublicTestSuite) TestGetStats() { tests := []struct { name string setupMock func() func() (*sysMem.VirtualMemoryStat, error) - validateFunc func(*mem.Result, error) + validateFunc func(*memory.Result, error) }{ { name: "when GetStats Ok", @@ -55,10 +55,10 @@ func (suite *DebianGetStatsPublicTestSuite) TestGetStats() { }, nil } }, - validateFunc: func(got *mem.Result, err error) { + validateFunc: func(got *memory.Result, err error) { suite.NoError(err) suite.NotNil(got) - suite.Equal(&mem.Result{ + suite.Equal(&memory.Result{ Total: 1024, Free: 512, Cached: 256, @@ -66,13 +66,13 @@ func (suite *DebianGetStatsPublicTestSuite) TestGetStats() { }, }, { - name: "when mem.VirtualMemory errors", + name: "when memory.VirtualMemory errors", setupMock: func() func() (*sysMem.VirtualMemoryStat, error) { return func() (*sysMem.VirtualMemoryStat, error) { return nil, assert.AnError } }, - validateFunc: func(got *mem.Result, err error) { + validateFunc: func(got *memory.Result, err error) { suite.Error(err) suite.ErrorContains(err, assert.AnError.Error()) suite.Nil(got) @@ -82,7 +82,7 @@ func (suite *DebianGetStatsPublicTestSuite) TestGetStats() { for _, tc := range tests { suite.Run(tc.name, func() { - debian := mem.NewDebianProvider() + debian := memory.NewDebianProvider() if tc.setupMock != nil { debian.VirtualMemoryFn = tc.setupMock() diff --git a/internal/provider/node/memory/linux_get_vm_public_test.go b/internal/provider/node/memory/linux_get_vm_public_test.go index 1bf0896e7..6a75d3ea3 100644 --- a/internal/provider/node/memory/linux_get_vm_public_test.go +++ b/internal/provider/node/memory/linux_get_vm_public_test.go @@ -40,11 +40,11 @@ func (suite *LinuxGetStatsPublicTestSuite) TearDownTest() {} func (suite *LinuxGetStatsPublicTestSuite) TestGetStats() { tests := []struct { name string - validateFunc func(*mem.Result, error) + validateFunc func(*memory.Result, error) }{ { name: "returns not implemented error", - validateFunc: func(result *mem.Result, err error) { + validateFunc: func(result *memory.Result, err error) { suite.Nil(result) suite.ErrorIs(err, provider.ErrUnsupported) }, @@ -53,7 +53,7 @@ func (suite *LinuxGetStatsPublicTestSuite) TestGetStats() { for _, tc := range tests { suite.Run(tc.name, func() { - linux := mem.NewLinuxProvider() + linux := memory.NewLinuxProvider() tc.validateFunc(linux.GetStats()) }) diff --git a/pkg/sdk/client/osapi_public_test.go b/pkg/sdk/client/osapi_public_test.go index a62d5fb05..cdd3887ff 100644 --- a/pkg/sdk/client/osapi_public_test.go +++ b/pkg/sdk/client/osapi_public_test.go @@ -79,7 +79,7 @@ func (suite *ClientPublicTestSuite) TestNew() { suite.NotNil(c.Health) suite.NotNil(c.Audit) suite.NotNil(c.File) - suite.NotNil(c.Cron) + suite.NotNil(c.Schedule) }, }, { diff --git a/pkg/sdk/client/schedule_public_test.go b/pkg/sdk/client/schedule_public_test.go index fcc84ba12..8e4f52cfc 100644 --- a/pkg/sdk/client/schedule_public_test.go +++ b/pkg/sdk/client/schedule_public_test.go @@ -180,7 +180,7 @@ func (suite *SchedulePublicTestSuite) TestScheduleList() { client.WithLogger(slog.Default()), ) - resp, err := sut.Cron.List(suite.ctx, "_any") + resp, err := sut.Schedule.List(suite.ctx, "_any") tc.validateFunc(resp, err) }) } @@ -355,7 +355,7 @@ func (suite *SchedulePublicTestSuite) TestScheduleGet() { client.WithLogger(slog.Default()), ) - resp, err := sut.Cron.Get(suite.ctx, "_any", "backup") + resp, err := sut.Schedule.Get(suite.ctx, "_any", "backup") tc.validateFunc(resp, err) }) } @@ -620,7 +620,7 @@ func (suite *SchedulePublicTestSuite) TestScheduleCreate() { client.WithLogger(slog.Default()), ) - resp, err := sut.Cron.Create(suite.ctx, "_any", tc.opts) + resp, err := sut.Schedule.Create(suite.ctx, "_any", tc.opts) tc.validateFunc(resp, err) }) } @@ -862,7 +862,7 @@ func (suite *SchedulePublicTestSuite) TestScheduleUpdate() { client.WithLogger(slog.Default()), ) - resp, err := sut.Cron.Update( + resp, err := sut.Schedule.Update( suite.ctx, "_any", "backup", @@ -1015,7 +1015,7 @@ func (suite *SchedulePublicTestSuite) TestScheduleDelete() { client.WithLogger(slog.Default()), ) - resp, err := sut.Cron.Delete(suite.ctx, "_any", "backup") + resp, err := sut.Schedule.Delete(suite.ctx, "_any", "backup") tc.validateFunc(resp, err) }) }