Code Manager API
You can use the Code Manager API to deploy code and check the status of deployments on your primary server and compilers without direct shell access.
Forming Code Manager API requests
The Code Manager API accepts well-formed HTTPS requests and requires authentication.
URI
path
following the
pattern:https://<DNS>:8170/code-manager/v1/<ENDPOINT>
-
DNS
: Your primary server's DNS name. You can uselocalhost
, manually enter the DNS name, or use apuppet
command (as explained in Using example commands). -
ENDPOINT
: One or more sections specifying the endpoint, eitherdeploys
,webhook
, ordeploys/status
.
8170
, you need to change the port number
in the path.https://$(puppet config print server):8170/code-manager/v1/deploys/status
https://localhost:8170/code-manager/v1/deploys/status
https://puppet.example.dns:8170/code-manager/v1/deploys/status
To form a complete curl command, you need to provide appropriate curl arguments, authentication, and you might need to supply the content type and/or additional parameters specific to the endpoint you are calling.
For general information about forming curl commands, authentication in commands, and Windows modifications, go to Using example commands.
Code Manager API authentication
Code Manager API requests require token-based authentication. For instructions on generating, configuring, revoking, and deleting authentication tokens in PE, go to Request an authentication token for deployments or Token-based authentication.
deploys
endpoints,
you can use an X-authentication header with the puppet-access show
command, such
as:auth_header="X-Authentication: $(puppet-access show)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys/status"
curl --insecure --header "$auth_header" "$uri"
auth_header="X-Authentication: <TOKEN>"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys/status"
curl --insecure --header "$auth_header" "$uri"
deploys
endpoints, when calling the
webhook
endpoint,
you must append the token as a query parameter. Tokens
supplied in query parameters might appear in access
logs.POST /v1/deploys
Trigger Code Manager to deploy code to a specific
environment or all environments, or use the dry-run
parameter
to test your control repo connection.
Request format
application/json
. The body must be a JSON object
using the keys described in the following table. You must supply either deploy-all
or environments
,
and, although not required, you might find the other keys useful in certain situations.Key | Format | Definition |
---|---|---|
deploy-all |
Boolean | Set to true if you want to trigger
code deployments for all known environments.If For information about how Code Manager detects environments, refer to Add an environment. |
environments |
Array of strings | Specify the names of one or more specific environments for which you
want to trigger code deployments. This key is required if |
deploy-modules |
Boolean | Indicate whether Code Manager deploys
modules declared in an environment's Puppetfile. If
Restriction: Modules are always deployed the first time an
environment is deployed, even if you set
deploy-modules to false .
This ensures environments are fully populated upon first use. If you
want to exclude a module from an environments initial deployment,
remove or comment-out the module in the environment's Puppetfile.For more information, refer to: Managing modules with a Puppetfile |
modules |
JSON object | A comma-separated or space-separated list of specific modules to deploy. |
wait |
Boolean | Indicates how soon you want Code Manager to
return a response. If If
|
dry-run |
Boolean | Use to test Code Manager's connection to
your source control provider. If For more information about having multiple remotes, refer to: How the control repository works |
Here are three examples of complete curl commands for the deploys
endpoint.
production
environment and uses
the wait
key to get a more detailed response after the
deployment
finishes:type_header='Content-Type: application/json'
auth_header="X-Authentication: $(puppet-access show)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys"
data='{"environments": ["production"], "wait": true}'
curl --header "$type_header" --header "$auth_header" --request POST "$uri" --data "$data"
wait
key:type_header='Content-Type: application/json'
auth_header="X-Authentication: $(puppet-access show)"
cacert="$(puppet config print localcacert)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys"
data='{"environments": ["production", "testing"], "wait": true}'
curl --header "$type_header" --header "$auth_header" --cacert "$cacert" --request POST "$uri" --data "$data"
type_header='Content-Type: application/json'
auth_header="X-Authentication: $(puppet-access show)"
cacert="$(puppet config print localcacert)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys"
data='{"deploy-all": true}'
curl --header "$type_header" --header "$auth_header" --cacert "$cacert" --request POST "$uri" --data "$data"
Response format
wait
key, the response
arrives after the deployments finish. You might have to wait several minutes, depending
on the number of environments, deployment sizes, and how geographically dispersed the
deployments are.status
key depend on the value of the wait
key in the request.Key | Definition |
---|---|
environment |
The name of the queued or deployed environment. |
id |
An integer generated by Code Manager that identifies the environment's order in the deployment queue. |
status |
A code deployment's status at the time of the response. If the
request omitted
wait or included
"wait": false , then the status is either new or queued .
If the request included
"wait":
true , the status is either
complete or failed .
|
deploy-signature |
The commit SHA from the control repo that Code Manager used for the environment's code
deploy. Only included if the request included |
file-sync |
An object containing environment-commit and code-commit , which are commit SHAs used internally by file
sync to identify the code synced to the code staging directory.Only
included if the request included |
error |
Only included if the request included "wait":
true and the deployment failed.The
error key is an object that uses the following keys to
describe the failure:
Failure information remains in this endpoint's responses until cleaned up by garbage collection, even if the environment has a successful deployment after the failure. For more information, refer to Configuring garbage collection. |
false
or omitted wait
key:[
{
"environment": "production",
"id": 1,
"status": "queued"
},
{
"environment": "testing",
"id": 2,
"status": "queued"
}
]
"wait": true
:[
{
"deploy-signature":"482f8d3adc76b5197306c5d4c8aa32aa8315694b",
"file-sync":{
"environment-commit":"6939889b679fdb1449545c44f26aa06174d25c21",
"code-commit":"ce5f7158615759151f77391c7b2b8b497aaebce1"},
"environment":"production",
"id":3,Code Manager
"status":"complete"
}
]
{
"environment": "test14",
"error": {
"details": {
"corrected-name": "test14"
},
"kind": "puppetlabs.code-manager/deploy-failure",
"msg": "Errors while deploying environment 'test14' (exit code: 1):\nERROR\t -> Authentication failed for Git remote \"https://github.com/puppetlabs/puffppetlabs-apache\".\n"
},
"id": 52,
"status": "failed"
}
deploys
endpoint, refer to Troubleshooting Code Manager for
information about monitoring logs associated with this endpoint.POST /v1/webhook
Deploy code by triggering your Code Manager webhook.
Request format
POST
requests, when forming Code Manager API requests to the webhook
endpoint, you must append parameters to the URI path, rather than
using a JSON body. Available parameters include:-
type
: Always required. Identifies your Git host. -
prefix
: Required if your source configuration uses prefixing. Specifies the prefix to use when converting branch names to environment names. -
token
: Required unless you disabledauthenticate_webhook
in your Code Manager configuration. You must supply the authentication token in thetoken
parameter. Tokens supplied in query parameters might appear in access logs.
For more information and examples for each parameter, refer to Code Manager webhook query parameters.
type
and token
parameters:curl -X POST 'https://$(puppet config print server):8170/code-manager/v1/webhook?type=github&token=<TOKEN>'
Response format
When your Code Manager webhook is automatically triggered by a push to the control repo, all responses appear in your Git provider's interface. Code Manager does not give command line responses to automatic webhook triggers.
If you use a curl command to manually trigger the webhook, and your request is well-formed and valid, Code Manager returns an OK response. This only indicates that the request was valid, it does not indicate whether a resulting code deployment succeeded or failed.
Error responses
If an error occurs when the webhook is automatically triggered, check your Git provider interface for error responses. If there is a problem with the webhook, refer to Troubleshoot a Code Manager webhook.
If you use a curl command to manually trigger the webhook, and the request has a
missing or invalid type
, the endpoint returns an
unrecognized-webhook-type error along with a copy of the supplied
type
value and a list of valid type
values.
GET /v1/deploys/status
Get the status of code deployments that Code Manager is
currently processing for each environment. You can specify an id
query parameter to get the status of a particular deployment.
Request format
type_header='Content-Type: application/json'
auth_header="X-Authentication: $(puppet-access show)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys/status"
curl --header "$type_header" --header "$auth_header" "$uri"
A basic request
returns the status of all deployments in the queue. You can append the optional id
query parameter to get the status of a specific deployment
by calling its position in the current deployment queue. For example, this request calls
the status of the fifth deployment in the current
queue:type_header='Content-Type: application/json'
auth_header="X-Authentication: $(puppet-access show)"
uri="https://$(puppet config print server):8170/code-manager/v1/deploys/status?id=5"
curl --header "$type_header" --header "$auth_header" "$uri"
Response format
id
parameter, the successful response is a JSON object describing the status of each
deployment in the queue. The body is divided into three secondary objects (deploys-status
, file-sync-storage-status
, and file-sync-client-status
) that report information about deployments
depending on the deployments' statuses.:-
deploys-status
: Contains four arrays representing possible code deployment statuses, which arenew
,queued
,deploying
, orfailed
.- For each new, queued, deploying, and failed deployment, there is a nested
object containing the deployment's position in the queue (
id
), the environment name (environment
), and the time the deployment was put in the queue (queued-at
). - For failed deployments, there is an additional
error
object describing the failure (details
andcorrected-name
), the type of error (kind
), and a longer error message (msg
). Failure information remains in this endpoint's responses until cleaned up by garbage collection, even if the environment has a successful deployment after the failure. For more information, refer to Configuring garbage collection. - If there are no deployments with a particular status in the queue, the array for that status is empty.
- Successfully completed deployments are reported in either the
file-sync-storage-status
orfile-sync-client-status
objects.
- For each new, queued, deploying, and failed deployment, there is a nested
object containing the deployment's position in the queue (
-
file-sync-storage-status
: Contains adeployed
object that lists environments that Code Manager has successfully deployed to the code staging directory, but not yet synced to the live code directory. For each deployed environment, the response includes the environment name (environment
), the deployment date and time (date
), and the commit SHA from the control repo that Code Manager used for the environment's code deploy (deploy-signature
). -
file-sync-client-status
: Lists the status of your primary server and each compiler that Code Manager is deploying environments to, including whether the code in the primary server's staging directory has been synced to the live code directory. Contains:-
all-synced
: A Boolean indicating whether all requested code deployments are synced to the live code directories on their respective servers. -
file-sync-clients
: An object containing a list of servers that Code Manager deployed code to. For each server, the response includes the date and time of the server's last check in (last_check_in_time
), whether the server synchronized with file sync storage (synced-with-file-sync-storage
), and an array of deployment objects associated with that server. Each deployment object includes the environment name (environment
), the deployment date and time (date
), and the commit SHA from the control repo that Code Manager used for the environment's code deploy (deploy-signature
).
-
id
parameter, the response
is condensed and uses the following keys to describe the specified deployment:-
environment
: The name of the environment. -
status
: The deployment's status at the time of the response. Can benew
,queued
,deploying
,failed
,syncing
, orsynced
. -
queued-at
: The date and time when the deployment was put in the queue.
{
"environment": "production",
"id": 1,
"status": "deploying",
"queued-at": "2018-05-10T21:44:25.000Z"
}
{
"deploys-status":{
"queued":[
{
"environment":"dev",
"id":3,
"queued-at":"2018-05-15T17:42:34.988Z"
}
],
"deploying":[
{
"environment":"test",
"id":1,
"queued-at":"2018-05-15T17:42:34.988Z"
},
{
"environment":"prod",
"id":2,
"queued-at":"2018-05-15T17:42:34.988Z"
}
],
"new":[
],
"failed":[
{
"environment": "test14",
"error": {
"details": {
"corrected-name": "test14"
},
"kind": "puppetlabs.code-manager/deploy-failure",
"msg": "Errors while deploying environment 'test14' (exit code: 1):\nERROR\t -> Authentication failed for Git remote \"https://github.com/puppetlabs/puffppetlabs-apache\".\n"
},
"queued-at": "2018-06-01T21:28:18.292Z"
}
]
},
"file-sync-storage-status":{
"deployed":[
{
"environment":"prod",
"date":"2018-05-10T21:44:24.000Z",
"deploy-signature":"66d620604c9465b464a3dac4884f96c43748b2c5"
},
{
"environment":"test",
"date":"2018-05-10T21:44:25.000Z",
"deploy-signature":"24ecc7bac8a4d727d6a3a2350b6fda53812ee86f"
},
{
"environment":"dev",
"date":"2018-05-10T21:44:21.000Z",
"deploy-signature":"503a335c99a190501456194d13ff722194e55613"
}
]
},
"file-sync-client-status":{
"all-synced":false,
"file-sync-clients":{
"chihuahua":{
"last_check_in_time":null,
"synced-with-file-sync-storage":false,
"deployed":[
]
},
"localhost":{
"last_check_in_time":"2018-05-11T22:41:20.270Z",
"synced-with-file-sync-storage":true,
"deployed":[
{
"environment":"prod",
"date":"2018-05-11T22:40:48.000Z",
"deploy-signature":"66d620604c9465b464a3dac4884f96c43748b2c5"
},
{
"environment":"test",
"date":"2018-05-11T22:40:48.000Z",
"deploy-signature":"24ecc7bac8a4d727d6a3a2350b6fda53812ee86f"
},
{
"environment":"dev",
"date":"2018-05-11T22:40:50.000Z",
"deploy-signature":"503a335c99a190501456194d13ff722194e55613"
}
]
}
}
}
}