Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 32 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,27 @@ them to be used as appliances.

| | |
|---|---|
| 🖥️ **System & Network** | Hostname, uptime, OS info, disk, memory, load, DNS read/update, ping, command execution (exec/shell) |
| ⚡ **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 |
| 🖥️ **[Node Management][]** | Hostname, uptime, OS info, disk, memory, load |
| 🌐 **[Network Management][]** | DNS read/update, ping |
| ⚙️ **[Command Execution][]** | Remote exec and shell across managed hosts |
| ⚡ **[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
[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][]
Expand All @@ -46,6 +58,20 @@ them to be used as appliances.
[Usage]: https://osapi-io.github.io/osapi/sidebar/usage
[Roadmap]: https://osapi-io.github.io/osapi/sidebar/development/roadmap

## 🔗 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

## 📄 License

The [MIT][] License.
Expand Down
4 changes: 2 additions & 2 deletions docs/docs/gen/api/create-a-new-job.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Submit a new job to the queue for processing."
sidebar_label: "Create a new job"
hide_title: true
hide_table_of_contents: true
api: eJztV11r60YQ/SvLPLUgJXJqp62gD74lgaS0N9w4LTQYs5LG9jrSrrI7G8c1+u9lVrJjx27TC/fhFgJ+sKT5ODPn7MesoUCXW1WTMhpSuPVZpUhIoXEpFiYTZATNUTx69CimxoramhydU3p2AhGQnDlI7+HaZJNfpZYzrFDTZHhzNVmYbGJqtJJDOxhH4DD3VtEK0vs1fEBp0Q49zdl/YbJ0aRUhjJtxBBYfPTr6YIoVpOtXGEdz3EDLLUpCBsIeymIBKVmPEeRGE2pib1nXpcoDjNOF4xBrcPkcK8n/aFUjpGCyBeYEEdSWQZNCx1+3BRwzPYS1NWdwNdqpsVUkpBNSXN9+/E20roxXFoViQ1ne7CRssT/HRtYqzk2BM9QxPpOVcdvpNTzJUhWSGMi25qZhJuwMaTI3jrSscAevI6v07Cje1klsnALB1nhSeia+mUi9isRElmUkjBWuxlxNVb61/pbrwGdZ1SWnYXP4fPBRpfRPPWi4hhcS73c6f1jbOAJSFLL+HBRwbbJPrWQ4UIjkaqNdS+JZ0vtnFS2l62RUCOdz1vbUl+WKi/tCIuKVoIpjjLA+JEEK3qvigKE7rR49ClWgJjVVaAM/vBw3gBcm2ydhMEjwh36SxHj2Yxb3e0U/lt/3zuN+//x8MOj3kyRJoInAkSTv3hbJlVakZClae2GmIf1BWq+7bYHFyN1/Um5/0ShNOEO7W7PSdN4/KstffhebEEL7KkO7l67HclcVOpJV/XYNQSJhTW589sGfJWeDODmPe/1RL0kT/v0Jr+XYcbjt3HEJtqLrNNhPkkPZXemwBkS3w4larkojiy+oNrTW2Le7MhQ7zxtig6+guSRh8txbi8V+ry6lKrHg3c0iWYVP2EnjhHkvkKQq/4OshtvdT3Q+QmbG0wuIo2kLj5xaIy2NfQh8Gk8hNe83R+V2qK62SHbYSzJIkrCPdqxesNUBo0c2kjstPc2NVX9hIWIxvLkSD7gSW/G8E/t/IPa7Q2Ivjc1UUaAWsbjSzk+nKleoiQ/2SjkXrjXv7H797A6ObcQXbbhwNujZ5kh7J/PrJrOJoEKamwJSqI0LnZc8QsDpwmR8PKN9Qsszyc7Accu0tczsjh1bpHOimn2DGaSQBSOIuj+XmxvL9R+jcDFgOXx6GVEuNvD354Vjl/L2ltxEoPTUBARdqcMZ7ywvIxSfIxAB19J2rXeSnISrG5ddySDHLmZ7AXkZ2l53fP0i688f8NoOET7TaV1KpRmCtyVHbTsf7kZ8H+Iq+XG9zqTDO1s2Db9+9GhXLR9P0iqZcb334yaCOcoCbZgGH3DFhbQw4xEnZfPSc/KDldhEG49hnmNN/2o73pHMzcfbEdPazZVVECxYueQJUi4hBYjA1O3Emq7bd2sopZ55OWPbNiaLQO5r6JVmQlXdp3Yw2iBcr1uLkXlA3TQQdaUQP0MzbprmbzsVY5Q=
api: eJztV11r60YQ/SvLPLUgJXJqp62gD74lgaS0N9w4LTQYs5LG9jrSrrI7G8c1+u9lVrJjx27TC/fhFgJ+sKT5ODPn7MesoUCXW1WTMhpSuPVZpUhIoXEpFiYTZATNUTx69CimxoramhydU3p2AhGQnDlI7+HaZJNfpZYzrFDTZHhzNVmYbGJqtJJDOxhH4DD3VtEK0vs1fEBp0Q49zdl/YbJ0aRUhjJtxBBYfPTr6YIoVpOtXGEdz3EDLLUpCBsIeymIBKVmPEeRGE2pib1nXpcoDjNOF4xBrcPkcK8n/aFUjpGCyBeYEEdSWQZNCx1+3BRwzPYS1NWdwNdqpsVUkpBNSXN9+/E20roxXFoViQ1ne7CRssT/HRtYqzk2BM9QxPpOVcdvpNTzJUhWSGMi25qZhJuwMaTI3jrSscAevI6v07Cje1klsnALB1nhSeia+mUi9isRElmUkjBWuxlxNVb61/pbrwGdZ1SWnYXP4fPBRpfRPvSh8mbR4oOGCXhi936HhsNBxBKQoQPg5yOHaZJ9a/XCgEMnVRruW0bOk98+SWkrXaaoQzucs9KkvyxVX+oUUxctCFcfoYbFIghS8V8UBXXdaPXoUqkBNaqrQBrJ4bW4AL0y2z8hgkOAP/SSJ8ezHLO73in4sv++dx/3++flg0O8nSZJAE4EjSd69rZgrrUjJUrT2wkxD+oO0Xnd7BCuTu/+k3P4KUppwhna3ZqXpvH9Uo7/8LjYhhPZVhnYvXY+1ryp0JKv67RqCRMIC3fjsgz9LzgZxch73+qNekib8+xNey7HjcNu54xJsRddpsJ8kh7K70kH2otvuRC1XpZHFF1QbWmvs210Zip3nDbHBV9BckjB57q3FYr9Xl1KVWPBWZ5GswifspHHCvBdIUpX/QVbD7VYoOh8hM+PpBcTRtIVHTq2RlsY+BD6Np5CaN5+jcjtUV1skO+wlGSRJ2FQ7Vi/Y6oDRIxvJnZae5saqv7AQsRjeXIkHXImteN6J/T8Q+90hsZfGZqooUItYXGnnp1OVK9TEp3ylnAt3nHd2v352B8c24os2XDgb9GxzpL2T+XWT2URQIc1NASnUxoXOS54n4HRhMj6e0T6h5QFlZ/q4ZdpaZnZnkC3SOVHNvsEMUsiCEUTdn8vNjeX6j1G4GLAcPr3MKxcb+PvDw7EbentlbiJQemoCgq7U4Yx3lpd5is8RiIBrabvWO0lOwtWNy65kkGMXs72AvExwrzu+fpH15097bYcIn+m0LqXSDMHbkqO2nQ93I74PcZX8uF5n0uGdLZuGXz96tKuWjydplcy43vtxE8EcZYE2jIYPuOJCWpjxiJOyeek5+cFKbKKNxzDPsaZ/tR3vSObm4+2Iae2GzCoIFqxc8jgpl5ACRGDqdnxN1+27NZRSz7ycsW0bk0Ug9zX0SjOhqu5TOyVtEK7XrcXIPKBuGoi6UoifoRk3TfM3CXNotg==
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
Expand Down Expand Up @@ -153,7 +153,7 @@ Submit a new job to the queue for processing.
required={true}
schemaName={"string"}
qualifierMessage={undefined}
schema={{"type":"string","description":"The target hostname for routing (_any, _all, or specific hostname).","example":"_any","x-oapi-codegen-extra-tags":{"validate":"required,min=1"}}}
schema={{"type":"string","description":"The target hostname for routing (_any, _all, or specific hostname).","example":"_any","x-oapi-codegen-extra-tags":{"validate":"required,min=1,valid_target"}}}
>

</SchemaItem>
Expand Down
4 changes: 2 additions & 2 deletions docs/docs/gen/api/retry-job-by-id.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Create a new job using the same operation data as an existing job.
sidebar_label: "Retry a job"
hide_title: true
hide_table_of_contents: true
api: eJztWG1rIzcQ/itCn1pYJ+vUTltDPziXO3BKuSPntNBgwuxqbMvZlfakWSeu2f9eRvLacezeXeGgDQQC2Zd5fZ5HsmbXUqHPna5IWyMH8o1DIBQgDD6Ihc1E7bWZCZqj8FCisBU6YFuhgECAF2AEPmpPbLaw2YkYz1FYp2faQBFCaC8qhx7dEtWJuEaqnfEhZJtkdHkiE0kw83JwK69sdvcbGJhhiYbuhh9Gdwub3W1TezlJ5PZupORAXiO51ZXNLlajS5lIj3ntNK3k4HYtLxAcumFNcw6+sNngwWlCOWkmiazAQYmEzgdbAyXKgdRKJlIzHhXQXCbS4adaO1RyQK7G5BloNzejS2GnoSVuh6xwXBA35fM5liAHa0mrimN7ctrMZCKn1pVAciDrOuR77FiodCe3CmdoOvhIDjoRk7VcQqEVEAdoa0mCX9NwG/wMPV1YtWLrXblTKDwmMreG0BC/g6oqdB6gO114rn99WKTNFpiTTGTlGGjSGKogcDOku7n1FJE67GofmfdLdE4rFNFTtJ5ial2Ai3HSqKJyLnEKdUGeAbwDsxJ6Kowl4SvM9VSjYkDxEcqq4Jxs8i9ws6UmLCtaJaU2v3QZuUSSphCrFdB1BJJfNgyrr6zxsfmztMv/9hscb3pYBeIfwIs8rCAlfJ3n6P20LooghG9EAa8Erb5GT880avSnGoVWaIixdFsK2oKZgj18+/0Uf+qlaQfPfs46va7qdeDH7nmn1zs/7/d7vTRNU9kk0hNQ7b8shpHRpKEQ0f7JgtlPW5vKWYYOlQwcLLXXEaRNfG0IZ+ie9qwNnfcOMjI7v/4u2hDC1GWGbi9dN4igRE9QVl/uIeyPHGrrs1/8WXrW76TnnW5v3E0HKf/9KaOU2iV523K4RW6y02Hcf4MQo/Q2Suyl6aH4RibIW2xWv9htZt9QcOicdV8GZiie3LfcBl9BcyBh87x27vkSfge6QNVumBqXuFHHCVOvkEAXX6GsoVKaL6EQGx8Bma1pV8TRtKpGTm2QHqy7D5TamkJq3k2OKu5QYLFJdthL0k/TpxvMW7Y6IPXIjnJjoKa5dfovVKIjhh9G4h5XYqufV2JfArE/HBL7zrpMK4VGdMTI+Ho61blGQ6JCV2rvw8nmld2XwG7vkN0rm4WzytTWRr1uvy+Bx/6x39RgGI907UTzSub/nswmkSXS3PIsWFkfkOfJbSBPFzY7XWvVnAZOw3DolnHem+wmxY/MYCTp6by4LXpOVLXTHN9nwUgmm4t37Tn06o9xOO6xMq53Q9nbtpMjM1ScYxoeOKc2WGzaHM7412E3CfNZQCaSi4+IdU/Sk3AC55ZLCFLcxAzzjADW73Og1zs1/7fjfkSW8JFOqwK04U5qV3CFkbxwUpaJHITDcuRvkkiGjl+u1xl4vHFF0/DjTzW6VWR1CU5DxiDerqXSnq93w/A/ovHd9eaQ9b343Eh/tPDNwziSLqGo+U4m8h5X8YNCM2kSOUdQ6EJZ8cWbmLwzZved48Em0yStxzDPsaLP2k6erIYP7z+OWaabLwNlWIvSwQMjCg+xSFvF7yr86YCfrWUBZlbDjG1jTBY17K+JZ2sgdHUUhvU6WoztPZqm2aJCfM/ANM3fav9l1A==
api: eJztWG1rIzcQ/itiPrWwTtapnbaGfvBd7sAp5Y6c00KDMdrV2JazK+1Js05cs/+9jOS149i9u8JBexAIZLUazcvzPJI1uwGFPne6Im0NDOC1Q0kopDD4IJY2E7XXZi5ogcLLEoWt0Em2FUqSFNILaQQ+ak9strTZmRgvUFin59rIIrjQXlQOPboVqjNxg1Q744PLNsjo6gwSIDn3MLiDa5tNf5NGzrFEQ9Ph+9F0abPpLrSHSQK70UjBAG6Q3PraZq/WoytIwGNeO01rGNxt4BVKh25Y04KdL202eHCaECbNJIFKOlkiofPB1sgSYQBaQQKa8agkLSABhx9r7VDBgFyNyTPQbm9HV8LOQklcDlnhOCEuyucLLCUMNkDrin17ctrMIYGZdaUkGEBdh3iPHSsr3cmtwjmaDj6Sk52IyQZWstBKEjtoc0nCuqbhMvgdenpl1Zqt9+nOZOExgdwaQkM8J6uq0HmA7nzpOf/NcZI2W2JOkEDlGGjSGLIg6eZI04X1FJE6ruoQmXcrdE4rFHGlaFeKmXUBLsZJo4rKucKZrAvyDOBUmrXQM2EsCV9hrmcaFQOKj7KsCo7JJv8CN1tqwrKidVJq80s3CVPTmBjDmABpCo5bNd1EVHmyYYx9ZY2PSFykXf53WO14W9A6qOBBepGH7aSEr/McvZ/VRRFU8ZX44G2h1ZeI65lgjf5Yo9AKDTGwbsdHmzDzcQB2v5/iT7007eDFz1mn11W9jvyxe9np9S4v+/1eL03TFJoEPEmq/eeVMTKatCxEtH+yew7D1qZylqFDBYGDlfY6grT1rw3hHN3TmrWhy95RRGbn199F60KYuszQHYTrBhGU6EmW1edrCIclu9qtOUz+Ir3od9LLTrc37qaDlP/+hCildn/etRzukJvsdRgP4yDEKL2tEntpeiy+kQmCFtujQOxPtq8oOHTOus8DMxRPxi23Ya2ghSRh87x27vl+fit1gao9PTWucKuOM6ZeIUldfIGyhkppfpSF2K4RMrM17ZM4GVbVyKEN0oN194FSW1MIzUfLScUdCywWyQsOgvTT9OkB84atjkg9caLcGlnTwjr9FyrREcP3I3GPa7HTzwux3wKxPxwT+9a6TCuFRnTEyPh6NtO5RkOiQldq78M154Xdb4Hd3jG71zYLF5eZrY16OX6/BR77p35Tg2G80rXtzQuZ/3symwRKpIXlxrCyPiDPbdwAzpc2O99o1ZwHTkOn6Fax+Zvs28YPzGAk6WnzuEt6QVS1rR2Ps2AEyfbhbXsPvf5jHK57rIybfYf2pq3kREMVm5qGu8+ZDRbbModz/nXYt8V8F4AEOPmIWPcsPQs3cC65lEGKW5+hnxGS9fsc6M1ezf9t7x+RJXyk86qQ2nAltSs4w0heuClDAoNwWY78TRJg6Hhys8mkx1tXNA2//lijW0dWV9JpmTGIdxtQ2vPzvjP+RzS+u9lesr4Xn+rvTya+fRn705Usah5BAve4jl8XmkmTwAKlQhfSihOvY/DOmJfvFx4dMk3SrhjmOVb0SdvJk93w/t2HMct0+5mgDHsRnHxgROVDTNJW8SMLf0fgdxsopJnXcs620SeLWh7uiWd7IFR1EobNJlqM7T2aptmhQjxmYJrmbwCYavY=
sidebar_class_name: "post api-method"
info_path: gen/api/agent-management-api
custom_edit_url: null
Expand Down Expand Up @@ -109,7 +109,7 @@ Create a new job using the same operation data as an existing job. The original
required={false}
schemaName={"string"}
qualifierMessage={undefined}
schema={{"type":"string","description":"Override target hostname for the retried job. Defaults to _any if not specified.","example":"_any","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1"}}}
schema={{"type":"string","description":"Override target hostname for the retried job. Defaults to _any if not specified.","example":"_any","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=1,valid_target"}}}
>

</SchemaItem>
Expand Down