diff --git a/.gitignore b/.gitignore index 2abfd092..0be67693 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ result.xml test/vendor/ tmp/ -osapi +/osapi diff --git a/CLAUDE.md b/CLAUDE.md index c88029c2..84d9c6cc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,7 +38,7 @@ go test -run TestName -v ./internal/job/... # Run a single test - **`internal/agent/`** - Node agent: consumer/handler/processor pipeline for job execution - **`internal/provider/`** - Operation implementations: `node/{host,disk,mem,load}`, `network/{dns,ping}` - **`internal/config/`** - Viper-based config from `osapi.yaml` -- **`osapi-sdk`** - External SDK for programmatic REST API access (sibling repo, linked via `replace` in `go.mod`) +- **`pkg/sdk/`** - Go SDK for programmatic REST API access (`osapi/` client library, `orchestrator/` DAG runner) - Shared `nats-client` and `nats-server` are sibling repos linked via `replace` in `go.mod` - **`github/`** - Temporary GitHub org config tooling (`repos.json` for declarative repo settings, `sync.sh` for drift detection via `gh` CLI). Untracked and intended to move to its own repo. @@ -171,29 +171,25 @@ Create `internal/api/{domain}/`: ### Step 5: Update SDK -The `osapi-sdk` (sibling repo) provides the generated HTTP client used by -the CLI. The SDK syncs its `api.yaml` files from this repo via `gilt` -overlay (configured in `osapi-sdk/.gilt.yml`). When `just generate` runs -in the SDK, gilt pulls the latest specs from osapi's `main` branch and -regenerates the client code. +The SDK client library lives in `pkg/sdk/osapi/`. Its generated HTTP client +uses the same combined OpenAPI spec as the server +(`internal/api/gen/api.yaml`). -**When adding a new API domain:** +**When modifying existing API specs:** -1. Add the domain's `api.yaml` to `osapi-sdk/pkg/osapi/gen/{domain}/` -2. Run `just generate` in the SDK repo to regenerate the merged spec and - client code -3. Add a service wrapper in `osapi-sdk/pkg/osapi/{domain}.go` +1. Make changes to `internal/api/{domain}/gen/api.yaml` in this repo +2. Run `just generate` to regenerate server code (this also regenerates the + combined spec via `redocly join`) +3. Run `go generate ./pkg/sdk/osapi/gen/...` to regenerate the SDK client +4. Update the SDK service wrappers in `pkg/sdk/osapi/{domain}.go` if new + response codes were added +5. Update CLI switch blocks in `cmd/` if new response codes were added -**When modifying existing API specs** (adding responses, parameters, or -schemas to existing endpoints): +**When adding a new API domain:** -1. Make changes to `internal/api/{domain}/gen/api.yaml` in this repo -2. Run `just generate` here to regenerate server code -3. After merging to `main`, run `just generate` in `osapi-sdk` — gilt - will pull the updated specs and regenerate the client -4. Update the SDK service wrappers and CLI switch blocks if new response - codes were added (e.g., adding a 404 response requires a - `case http.StatusNotFound:` in the CLI) +1. Add a service wrapper in `pkg/sdk/osapi/{domain}.go` +2. Run `go generate ./pkg/sdk/osapi/gen/...` to pick up the new domain's + spec from the combined `api.yaml` ### Step 6: CLI Commands diff --git a/README.md b/README.md index 957109bf..bf3c77a1 100644 --- a/README.md +++ b/README.md @@ -22,56 +22,23 @@ them to be used as appliances. OSAPI demo -## ✨ Features - -| | | -|---|---| -| 🖥️ **[Node Management][]** | Hostname, uptime, OS info, disk, memory, load | -| 🌐 **[Network Management][]** | DNS read/update, ping | -| ⚙️ **[Command Execution][]** | Remote exec and shell across managed hosts | -| 📁 **[File Management][]** | Upload, deploy, and template files with SHA-based idempotency | -| 📊 **[System Facts][]** | Agent-collected system facts — architecture, kernel, FQDN, CPUs, network interfaces, service/package manager | -| 🔄 **[Agent Lifecycle][]** | Node conditions (memory, disk, load pressure), graceful drain/cordon for maintenance | -| ⚡ **[Async Job System][]** | NATS JetStream with KV-first architecture — broadcast, load-balanced, and label-based routing across hosts | -| 💚 **[Health][] & [Metrics][]** | Liveness, readiness, system status endpoints, Prometheus `/metrics` | -| 📋 **[Audit Logging][]** | Structured API audit trail in NATS KV with 30-day retention and admin-only read access | -| 🔐 **[Auth & RBAC][]** | JWT with fine-grained `resource:verb` permissions, built-in and custom roles, direct permission grants | -| 🔍 **[Distributed Tracing][]** | OpenTelemetry with trace context propagation across HTTP and NATS | -| 🖥️ **CLI Parity** | Every API operation has a CLI equivalent with `--json` for scripting | -| 🏢 **Multi-Tenant** | Namespace isolation lets multiple deployments share a single NATS cluster | - -[Node Management]: https://osapi-io.github.io/osapi/sidebar/features/node-management -[Network Management]: https://osapi-io.github.io/osapi/sidebar/features/network-management -[Command Execution]: https://osapi-io.github.io/osapi/sidebar/features/command-execution -[File Management]: https://osapi-io.github.io/osapi/sidebar/features/file-management -[Async Job System]: https://osapi-io.github.io/osapi/sidebar/features/job-system -[Health]: https://osapi-io.github.io/osapi/sidebar/features/health-checks -[Metrics]: https://osapi-io.github.io/osapi/sidebar/features/metrics -[Audit Logging]: https://osapi-io.github.io/osapi/sidebar/features/audit-logging -[Auth & RBAC]: https://osapi-io.github.io/osapi/sidebar/features/authentication -[Distributed Tracing]: https://osapi-io.github.io/osapi/sidebar/features/distributed-tracing - ## 📖 Documentation -[Features][] | [Architecture][] | [Getting Started][] | [API][] | [Usage][] | [Roadmap][] +[Getting Started][] | [API][] | [Usage][] | [SDK][] -[Features]: https://osapi-io.github.io/osapi/category/features -[Architecture]: https://osapi-io.github.io/osapi/sidebar/architecture [Getting Started]: https://osapi-io.github.io/osapi/ [API]: https://osapi-io.github.io/osapi/category/api [Usage]: https://osapi-io.github.io/osapi/sidebar/usage -[Roadmap]: https://osapi-io.github.io/osapi/sidebar/development/roadmap +[SDK]: https://osapi-io.github.io/osapi/sidebar/sdk/sdk ## 🔗 Sister Projects | Project | Description | | --- | --- | -| [osapi-sdk][] | Go SDK for OSAPI — client library and orchestration primitives | | [osapi-orchestrator][] | A Go package for orchestrating operations across OSAPI-managed hosts — typed operations, chaining, conditions, and result decoding built on top of the osapi-sdk engine | | [nats-client][] | A Go package for connecting to and interacting with a NATS server | | [nats-server][] | A Go package for running an embedded NATS server | -[osapi-sdk]: https://github.com/osapi-io/osapi-sdk [osapi-orchestrator]: https://github.com/osapi-io/osapi-orchestrator [nats-client]: https://github.com/osapi-io/nats-client [nats-server]: https://github.com/osapi-io/nats-server @@ -80,6 +47,4 @@ them to be used as appliances. The [MIT][] License. -[Agent Lifecycle]: https://osapi-io.github.io/osapi/sidebar/features/agent-lifecycle -[System Facts]: https://osapi-io.github.io/osapi/sidebar/features/node-management [MIT]: LICENSE diff --git a/cmd/client.go b/cmd/client.go index 604e2aab..4c606e6b 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/spf13/viper" diff --git a/cmd/client_agent_get.go b/cmd/client_agent_get.go index b80ae80d..b0d3b216 100644 --- a/cmd/client_agent_get.go +++ b/cmd/client_agent_get.go @@ -25,7 +25,7 @@ import ( "strings" "time" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_audit_export.go b/cmd/client_audit_export.go index b4389cb9..16b9efbf 100644 --- a/cmd/client_audit_export.go +++ b/cmd/client_audit_export.go @@ -25,7 +25,7 @@ import ( "fmt" "strconv" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/audit/export" diff --git a/cmd/client_file_upload.go b/cmd/client_file_upload.go index 5710a41d..16393ab9 100644 --- a/cmd/client_file_upload.go +++ b/cmd/client_file_upload.go @@ -27,8 +27,8 @@ import ( "github.com/spf13/cobra" - osapi "github.com/osapi-io/osapi-sdk/pkg/osapi" "github.com/retr0h/osapi/internal/cli" + osapi "github.com/retr0h/osapi/pkg/sdk/osapi" ) // clientFileUploadCmd represents the clientFileUpload command. diff --git a/cmd/client_health_status.go b/cmd/client_health_status.go index 33b2cd0e..3d8ac317 100644 --- a/cmd/client_health_status.go +++ b/cmd/client_health_status.go @@ -23,7 +23,7 @@ package cmd import ( "fmt" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_job_list.go b/cmd/client_job_list.go index aad8e4d7..e38d508f 100644 --- a/cmd/client_job_list.go +++ b/cmd/client_job_list.go @@ -26,7 +26,7 @@ import ( "strings" "time" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_job_run.go b/cmd/client_job_run.go index b4650a8d..85279441 100644 --- a/cmd/client_job_run.go +++ b/cmd/client_job_run.go @@ -29,7 +29,7 @@ import ( "os" "time" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_node_command_exec.go b/cmd/client_node_command_exec.go index bc632135..cf455c32 100644 --- a/cmd/client_node_command_exec.go +++ b/cmd/client_node_command_exec.go @@ -25,7 +25,7 @@ import ( "os" "strconv" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_node_command_shell.go b/cmd/client_node_command_shell.go index 91a9e504..1356edb9 100644 --- a/cmd/client_node_command_shell.go +++ b/cmd/client_node_command_shell.go @@ -25,7 +25,7 @@ import ( "os" "strconv" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_node_file_deploy.go b/cmd/client_node_file_deploy.go index e1cc5cbb..c825befc 100644 --- a/cmd/client_node_file_deploy.go +++ b/cmd/client_node_file_deploy.go @@ -24,7 +24,7 @@ import ( "fmt" "strings" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/cmd/client_node_status_get.go b/cmd/client_node_status_get.go index 72a97e7d..428c08fa 100644 --- a/cmd/client_node_status_get.go +++ b/cmd/client_node_status_get.go @@ -23,7 +23,7 @@ package cmd import ( "fmt" - "github.com/osapi-io/osapi-sdk/pkg/osapi" + "github.com/retr0h/osapi/pkg/sdk/osapi" "github.com/spf13/cobra" "github.com/retr0h/osapi/internal/cli" diff --git a/docs/docs/gen/api/agent-management-api.info.mdx b/docs/docs/gen/api/agent-management-api.info.mdx index 866fd437..fb10598f 100644 --- a/docs/docs/gen/api/agent-management-api.info.mdx +++ b/docs/docs/gen/api/agent-management-api.info.mdx @@ -20,13 +20,6 @@ import Export from "@theme/ApiExplorer/Export"; > - - - - @@ -155,6 +155,97 @@ Stop the agent from accepting new jobs. In-flight jobs continue to completion. +
+ + + Invalid hostname. + + +
+ + + + +
+ + + Schema + +
+ +
    + + + + + + + +
+
+
+ + + + +
+
+
+
+
diff --git a/docs/docs/gen/api/get-agent-details.api.mdx b/docs/docs/gen/api/get-agent-details.api.mdx index 7aa73a3a..5e78940f 100644 --- a/docs/docs/gen/api/get-agent-details.api.mdx +++ b/docs/docs/gen/api/get-agent-details.api.mdx @@ -5,7 +5,7 @@ description: "Get detailed information about a specific agent by hostname." sidebar_label: "Get agent details" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "get api-method" info_path: gen/api/agent-management-api custom_edit_url: null @@ -68,7 +68,7 @@ Get detailed information about a specific agent by hostname.