Skip to content
Open
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
2 changes: 2 additions & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
book
index.html
29 changes: 29 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Concord Documentation

This documentation covers Concord, a workflow server and orchestration engine that connects different
systems together using scenarios and plugins.

Concord provides a comprehensive platform for process automation, featuring:

- **Process Management**: execute workflows in isolated environments
- **Project Organization**: group processes with shared configuration and resources
- **Security**: built-in secrets management and team-based authorization
- **Extensibility**: rich plugin ecosystem for system integration

## Building

To build and view the documentation:

1. Install the required tools:
```shell
cargo install mdbook mdbook-variables
```

2. Serve the documentation locally:
```shell
mdbook serve
```

The documentation will be available at `http://localhost:3000`

The built documentation is output to the `book/` directory.
15 changes: 15 additions & 0 deletions docs/book.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[book]
authors = ["Concord Authors"]
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do we want to see here?

language = "en"
src = "src"
title = "Concord"

[preprocessor.variables.variables.site]
concord_core_version = "2.32.0"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can be replaced with ${project.version} value, if we wire up the mdbook build through Maven.

concord_source = "https://github.com/walmartlabs/concord/"
concord_plugins_source = "https://github.com/walmartlabs/concord-plugins/"
concord_plugins_v1_docs = "https://concord.walmartlabs.com/docs/plugins-v1"
concord_plugins_v2_docs = "https://concord.walmartlabs.com/docs/plugins-v2"

[output.html]
default-theme = "light"
87 changes: 87 additions & 0 deletions docs/src/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Summary

[Introduction](../README.md)

# User Guide

- [Overview](./getting-started/index.md)
- [Quick Start](./getting-started/quickstart.md)
- [Installation](./getting-started/installation.md)
- [Configuration](./getting-started/configuration.md)
- [Processes](./getting-started/processes.md)
- [Projects](./getting-started/projects.md)
- [Forms](./getting-started/forms.md)
- [Scripting](./getting-started/scripting.md)
- [Security](./getting-started/security.md)
- [Tasks](./getting-started/tasks.md)
- [Organizations and Teams](./getting-started/orgs.md)
- [Policies](./getting-started/policies.md)
- [JSON Store](./getting-started/json-store.md)
- [Node Roster](./getting-started/node-roster.md)
- [Development](./getting-started/development.md)

# Reference

- [Processes](./processes-v2/index.md)
- [Configuration](./processes-v2/configuration.md)
- [Flows](./processes-v2/flows.md)
- [Migration from v1](./processes-v2/migration.md)
- [Imports](./processes-v2/imports.md)
- [Profiles](./processes-v2/profiles.md)
- [Resources](./processes-v2/resources.md)
- [Tasks](./processes-v2/tasks.md)
- [Plugins](./plugins/index.md)
- [Ansible](./plugins/ansible.md)
- [Asserts](./plugins/asserts.md)
- [Concord](./plugins/concord.md)
- [Crypto](./plugins/crypto.md)
- [Datetime](./plugins/datetime.md)
- [Docker](./plugins/docker.md)
- [Files](./plugins/files.md)
- [HTTP](./plugins/http.md)
- [JSON Store](./plugins/json-store.md)
- [Key-value](./plugins/key-value.md)
- [Lock](./plugins/lock.md)
- [Mocks](./plugins/mocks.md)
- [Node Roster](./plugins/node-roster.md)
- [Resource](./plugins/resource.md)
- [Slack](./plugins/slack.md)
- [Sleep](./plugins/sleep.md)
- [SMTP](./plugins/smtp.md)
- [Triggers](./triggers/index.md)
- [GitHub](./triggers/github.md)
- [Cron](./triggers/cron.md)
- [Manual](./triggers/manual.md)
- [Generic](./triggers/generic.md)
- [OneOps](./triggers/oneops.md)
- [CLI](./cli/index.md)
- [Linting](./cli/linting.md)
- [Running Flows](./cli/running-flows.md)
- [API](./api/index.md)
- [API Key](./api/apikey.md)
- [Checkpoint](./api/checkpoint.md)
- [Form](./api/form.md)
- [JSON Store](./api/json-store.md)
- [Node Roster](./api/node-roster.md)
- [Organization](./api/org.md)
- [Policy](./api/policy.md)
- [Process](./api/process.md)
- [Project](./api/project.md)
- [Repository](./api/repository.md)
- [Role](./api/role.md)
- [Secret](./api/secret.md)
- [Team](./api/team.md)
- [Template](./api/template.md)
- [Trigger](./api/trigger.md)
- [User](./api/user.md)

# Deprecated Features

- [Processes (v1)](./processes-v1/index.md)
- [Configuration](./processes-v1/configuration.md)
- [Flows](./processes-v1/flows.md)
- [Imports](./processes-v1/imports.md)
- [Profiles](./processes-v1/profiles.md)
- [Resources](./processes-v1/resources.md)
- [Tasks](./processes-v1/tasks.md)
- [Templates](./templates/index.md)
148 changes: 148 additions & 0 deletions docs/src/api/apikey.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# API Key

An API Key is specific to a user and allows access to the API with the key
replacing the usage of user credentials for authentication.

The REST API provides support for a number of operations:

- [Create a New API Key](#create-key)
- [List Existing API keys](#list-keys)
- [Delete an Existing API Key](#delete-key)

<a name="create-key"/>

## Create a New API Key

Creates a new API key for a user.

* **URI** `/api/v1/apikey`
* **Method** `POST`
* **Headers** `Authorization`, `Content-Type: application/json`
* **Body**
```json
{
"username": "myLdapUsername",
"userDomain": "optional.domain.com"
}
```
* **Success response**
```
Content-Type: application/json
```

```json
{
"ok": true,
"id": "3b45a52f-91d7-4dd0-8bf6-b06548e0afa5",
"key": "someGeneratedKeyValue"
}
```
* **Example**: create a key, Concord will auto-generate a key name
```
curl -u myLdapUser \
-X POST \
-H "Content-Type: application/json" \
-d '{ "username": "myLdapUser" }' \
https://concord.example.com/api/v1/apikey
```

* **Example**: create a key, specify a key name
```
curl -u myLdapUser \
-X POST \
-H "Content-Type: application/json" \
-d '{ "username": "myLdapUser", "name": "myCustomApiKeyName" }' \
https://concord.example.com/api/v1/apikey
```

* **Example**: create a key when multiple users with the same username exist across domains
```
curl -u [email protected] \
-X POST \
-H "Content-Type: application/json" \
-d '{ "username": "myLdapUser", "userDomain": "example.com" }' \
https://concord.example.com/api/v1/apikey
```

<a name="list-keys"/>

## List Existing API keys

Lists any existing API keys for the user. Only returns metadata, not actual keys.

* **URI** `/api/v1/apikey`
* **Method** `GET`
* **Headers** `Authorization`, `Content-Type: application/json`
* **Body**
none
* **Success response**
```
Content-Type: application/json
```

```json
[
{
"id" : "2505acba-314d-11e9-adf9-0242ac110002",
"userId": "aab8a8e2-2f75-4859-add1-3b8f5d7a6690",
"name" : "key#1"
}, {
"id" : "efd12c7a-3162-11e9-b9c0-0242ac110002",
"userId": "aab8a8e2-2f75-4859-add1-3b8f5d7a6690",
"name" : "myCustomApiKeyName"
}
]
```
* **Example**
```
curl -u myLdapUser \
-H "Content-Type: application/json" \
https://concord.example.com/api/v1/apikey
```

<a name="delete-key"/>

## Delete an existing API key

Removes an existing API key.

* **URI** `/api/v1/apikey/${id}`
* **Method** `DELETE`
* **Headers** `Authorization`
* **Body**
none
* **Success response**
```
Content-Type: application/json
```

```json
{
"result": "DELETED",
"ok": true
}
```

* **Example**
```
curl -u myLdapUser \
-X DELETE \
-H "Content-Type: application/json" \
https://concord.example.com/api/v1/apikey/2505acba-314d-11e9-adf9-0242ac110002
```

<a name="apikey-authorization"/>

# Using an API key to access the Concord API

When accessing the Concord API, the **Authorization** header can be
set with the value of an API key. This replaces the need to authenticate
with user and password.

* **Example**
```
curl \
-H "Content-Type: application/json" \
-H "Authorization: someGeneratedKeyValue" \
https://concord.example.com/api/v1/apikey
```
72 changes: 72 additions & 0 deletions docs/src/api/checkpoint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Checkpoint

The checkpoint API can be used to list and restore
[checkpoints created in a flow](../processes-v1/flows.md#checkpoints).

- [List Checkpoints](#list)
- [Restore a Process](#restore)

<a name="list"/>

## List Checkpoints

You can access a list of all checkpoints for a specific process, identified by
the `id`, with the REST API.

* **URI** `/api/v1/process/{id}/checkpoint`
* **Method** `GET`
* **Headers** `Authorization`, `Content-Type: application/json`
* **Body**
none

* **Success response**

```
Content-Type: application/json
```

```json
[
{
"id": "...",
"name": "...",
"createdAt": "..."
},
{
"id": "...",
"name": "...",
"createdAt": "..."
},
...
]
```

<a name="restore"/>

## Restore a Process

You can restore a process state from a named checkpoint of a specific process
using the process identifier in the URL and the checkpoint identifier in the
body.

* **URI** `/api/v1/process/{id}/checkpoint/restore`
* **Method** `POST`
* **Headers** `Authorization`, `Content-Type: application/json`
* **Body**
```json
{
"id": "..."
}
```

* **Success response**

```
Content-Type: application/json
```

```json
{
"ok": true
}
```
Loading