Configuration as Code (CasC) HTTP API

14 minute readReference

You can use HTTP API endpoints to manage CasC bundles and create a new item in the operations center based on a CasC items.yaml file.

If you use an HTTP API endpoint to upload a bundle, the parent and availabilityPattern properties in the controller bundle.yaml file are not supported. The parent and availabilityPattern properties are only supported for configuring bundle availability and for bundle inheritance for controller bundles that are added to the operations center using the CasC bundle location.

Authentication and authorization

To access the CasC API, you need an API authentication token and administrator access rights. Refer to API authentication for more information.

Endpoints and methods

Table 1. Endpoints and methods
Endpoint Description Parameters Prerequisites

GET ${JENKINS_URL}/casc-bundle/list

Lists all available controller CasC bundles on the operations center.

None.

GET ${JENKINS_URL}/casc-bundle-mgnt/casc-bundle-update-log

Returns the same information that is available from the Update log tab on the CloudBees Configuration as Code export and update screen.

None.

GET ${JENKINS_URL}/casc-bundle-mgnt/check-bundle-update

Checks for bundle updates and returns information about the validation of the current bundle and the new available bundle version. If a bundle update is available, you can issue the /casc-bundle-mgnt/reload-bundle command to immediately apply the updated bundle without restarting the instance.

None.

GET ${JENKINS_URL}/casc-bundle/raw-bundle-validation-log

Returns the full validation log for all raw bundles. If the optional bundle parameter is specified, the output is filtered to only return the validation log for that bundle. If the optional controller parameter is true, the output is enriched with controller effective validation log.

  • Name: bundle (optional)

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

  • Name: controller (optional)

    • Parameter type: Query string parameter

    • Data type: boolean

    • Description: When the parameter value is true, each raw bundle validation log has a new controllers item that lists all effective validation logs of the corresponding bundle.

GET ${JENKINS_URL}/casc-bundle/effective-bundle-validation-log

Returns the full validation log for all effective bundles. If the optional controller parameter is specified, the output is filtered to only return the validation log for that controller.

  • Name: controller (optional)

    • Parameter type: Query string parameter, accepts a regular expression

    • Data type: string

    • Description: The name of the controller. For example, controller-.*01.

GET ${JENKINS_URL}/config-bundle-download-link

Downloads the client controller linkfile.

  • Name: id

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path of the controller item in the operations center. For example, folder1/controller1.

GET ${JENKINS_URL}/core-casc-export

Generates the entire CasC bundle as plain text and all of the YAML files are concatenated.

None.

GET ${JENKINS_URL}/core-casc-export/zipExport

Generates the zip file that contains all of the exported CasC YAML files. If a bundle update is available, you can issue the /core-casc-effective-bundle-export command to immediately apply the updated bundle without restarting the instance.

None.

POST ${JENKINS_URL}/casc-bundle/check-out

Checks out the bundles from all CasC bundle locations to the operations center and returns the JSON array of bundle sources, where each one contains an array of bundles.

None.

POST ${JENKINS_URL}/casc-bundle/get-effective-bundle

Downloads the effective bundle and applies CasC bundle inheritance, so it can be validated on the controller using the casc-bundle-mgnt/casc-bundle-validate endpoint. The expected input is a .zip file that contains all child and parent bundles that have changes. The output is the effective bundle in .zip format.

  • Name: bundle

    • Parameter type: Multipart/form-data

    • Data type: binary

    • Description: Attach the .zip file that contains the bundle.

POST ${JENKINS_URL}/casc-bundle/regenerate-token

Regenerates the controller bundle token and returns the new bundle information when successful.

  • Name: controllerPath

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path of the controller item in the operations center. For example, folder1/controller1.

The bundleId parameter has been deprecated in version 2.289.1.2. The controllerPath parameter should be used for all new applications.

POST ${JENKINS_URL}/casc-bundle/set-availability-pattern

Specifies the availability pattern, to define the path to controllers that can use the bundle.

  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

  • Name: regex

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path to one or more controllers that can use the bundle. This must be a regular expression and defines the bundles you can assign to a controller. For example, folder1/.* to use the bundle with any controller in the "folder1" folder.

POST ${JENKINS_URL}/casc-bundle/set-global-availability-pattern-behavior

Specifies the default global availability pattern behavior for the controller CasC bundle.

  • Name: visibility

    • Parameter type: Query string parameter

    • Data type: string

    • Description: When the parameter value is true, all CasC bundles that do not have a regex availability pattern defined can be used by any controller. This option provides more flexibility, but is less secure.

POST ${JENKINS_URL}/casc-bundle/clear-availability-pattern

Uses the availability pattern defined in the bundle.yaml file and clears the availability pattern for the controller CasC bundle if previously defined.

  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

POST ${JENKINS_URL}/casc-bundle/set-controller-to-bundle

Assigns a new controller path and returns the new bundle information when successful.

For this command to be successful, you must first define the availability pattern for the bundle by sending the /casc-bundle/set-availability-pattern or /casc-bundle/set-global-availability-pattern-behavior request.

  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

  • Name: controllerPath

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path of the controller item in the operations center. For example, folder1/controller1.

POST ${JENKINS_URL}/casc-bundle/set-default-bundle

Specifies a default bundle that is pre-selected in the operations center controller configuration screen when setting up a new controller.

The default bundle is pre-selected for controllers that match the availability pattern of the default bundle. To set the availability pattern of the default bundle, you can use the /casc-bundle/set-availability-pattern or /casc-bundle/set-global-availability-pattern-behavior request.

Specifying a default bundle does not assign the bundle to a controller. When setting up a new controller in the operations center, you must click Save or Apply from the controller configuration screen to assign the pre-selected bundle to the controller.

  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

POST ${JENKINS_URL}/casc-bundle/validate-uploaded-bundle

Validates a bundle stored in the operations center.

  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

POST ${JENKINS_URL}/casc-bundle-mgnt/reload-bundle

Applies the bundle update without restarting the instance when possible.

None.

POST ${JENKINS_URL}/casc-items/create-items

Creates a new item in the operations center based on an items.yaml file stored in the local filesystem.

  • Name: path

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path of the folder in the operations center where the item is created. The folder path must exist in the operations center prior to issuing the command. For example, /folder1. To create the item at the root of the operations center, you can omit this parameter.

  • Name: yaml

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path on the local filesystem to the items.yaml file. For example, /casc/items.yaml.

POST ${JENKINS_URL}/casc-bundle/set-master-to-bundle

Assigns a new controller path and returns the new bundle information when successful.

For this command to be successful, you must first define the availability pattern for the bundle by sending the /casc-bundle/set-availability-pattern or /casc-bundle/set-global-availability-pattern-behavior request.

If you are using CloudBees CI 2.277.4.2 - 2.289.1.2, and you send the /casc-bundle/set-master-to-bundle endpoint, no bundles are available to assign to the controller. You must first sign in to the operations center as a user with the Administer permission, navigate to the Configuration as Code bundles screen, define the Availability pattern, and then issue the request to assign a bundle to a controller.
  • Name: bundleId

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

  • Name: masterPath

    • Parameter type: Query string parameter

    • Data type: string

    • Description: The full path of the controller item in the operations center. For example, folder1/controller1.

The /casc-bundle/set-master-to-bundle request has been deprecated in version 2.289.2.2 due to offensive terminology. The /casc-bundle/set-controller-to-bundle endpoint should be used for all new applications.

POST ${JENKINS_URL}/core-casc-effective-bundle-export

Exports the current CasC bundle as a zip file.

None.

POST ${JENKINS_URL}/core-casc-effective-bundle-export/downloadFile/

Downloads the contents of the YAML file.

None.

POST ${JENKINS_URL}/export/download

Exports the item to the CasC YAML file. The path should include the Uniform Resource Identifier (URI) to the job. You can also end the request with the file name of the section: bundle.yaml, jenkins.yaml, plugins.yaml, plugin-catalog.yaml, rbac.yaml, items.yaml to download the section content.

None.

POST ${JENKINS_URL}/casc-bundle-mgnt/casc-bundle-validate

Validates a bundle against an instance. The bundle must be a .zip file.

  • Name: bundle

    • Parameter type: Multipart/form-data

    • Data type: binary

    • Description: Attach the .zip file that contains the bundle.

Request examples

In the request examples "admin" is the name of the user attempting to send the request and "https://my-operations-center.com/" is the operations center URL.
Table 2. Request examples
Endpoint Request example

GET /casc-bundle/list

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle/list"

GET /casc-bundle-mgnt/casc-bundle-update-log

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle-mgnt/casc-bundle-update-log"

GET /casc-bundle-mgnt/check-bundle-update

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle-mgnt/check-bundle-update"

GET /casc-bundle/raw-bundle-validation-log

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle/raw-bundle-validation-log?bundle=casc-bundle-java&controller=true"

GET /casc-bundle/effective-bundle-validation-log

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle/effective-bundle-validation-log?controller=controller-.*01"

GET /config-bundle-download-link

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/config-bundle-download-link/?id=folder1/controller1"

GET /core-casc-export

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-ci-instance.com/core-casc-export"

GET /core-casc-export/zipExport

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-ci-instance.com/core-casc-export/zipExport"

POST /casc-bundle/check-out

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/check-out"

POST /casc-bundle/get-effective-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" --data-binary @/path/to/bundle.zip -H "Content-Type: application/zip;charset=utf-8" -XPOST "https://my-operation-center.com/casc-bundle/get-effective-bundle?bundle=casc-bundle-java" --output response.zip

POST /casc-bundle/regenerate-token

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/regenerate-token?controllerPath=folder1/controller1"

POST /casc-bundle/set-availability-pattern

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-availability-pattern?bundleId=casc-bundle-java&regex=folder1.*"

POST /casc-bundle/set-global-availability-pattern-behavior

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-global-availability-pattern-behavior?visibility=true"

POST /casc-bundle/clear-availability-pattern

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com//casc-bundle/clear-availability-pattern?bundleId=casc-bundle-java"

POST /casc-bundle/set-controller-to-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-controller-to-bundle?bundleId=casc-bundle-java&controllerPath=folder1/controller1"

POST /casc-bundle/set-default-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-default-bundle?bundleId=casc-bundle-java"

POST /casc-bundle/validate-uploaded-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/validate-uploaded-bundle?bundleId=casc-bundle-java

POST /casc-bundle-mgnt/reload-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle-mgnt/reload-bundle"

POST /casc-items/create-items

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-items/create-items?path=/folder1" --data-binary @/casc/items.yaml -H "Content-Type:text/yaml"

POST /casc-bundle/set-master-to-bundle

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-master-to-bundle?bundleId=casc-bundle-java&masterPath=folder1/controller1"

POST /core-casc-effective-bundle-export

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-ci-instance.com/core-casc-effective-bundle-export/" --output download.zip

POST /core-casc-effective-bundle-export/downloadFile/

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-ci-instance.com/core-casc-effective-bundle-export/downloadFile/bundle.yaml"

POST /export/download

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-ci-instance.com/job/self-service/export/download"

POST /casc-bundle-mgnt/casc-bundle-validate

curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle-mgnt/casc-bundle-validate" --header "Content-type: application/zip" --data-binary "@/path/to/your/bundle.zip"

Response examples

Response examples are formatted for better readability.
GET /casc-bundle/list
GET /casc-bundle-mgnt/casc-bundle-update-log
GET /casc-bundle-mgnt/check-bundle-update
GET /casc-bundle/raw-bundle-validation-log
GET /casc-bundle/effective-bundle-validation-log
GET /config-bundle-download-link
GET /core-casc-export
POST /casc-bundle/check-out
POST /casc-bundle/get-effective-bundle
POST /casc-bundle/regenerate-token
POST /casc-bundle/set-availability-pattern
POST /casc-bundle/set-global-availability-pattern-behavior
POST /casc-bundle/clear-availability-pattern
POST /casc-bundle/set-controller-to-bundle
POST /casc-bundle/set-default-bundle
POST /casc-bundle/validate-uploaded-bundle
POST /casc-bundle-mgnt/reload-bundle
POST /casc-items/create-items
POST /casc-bundle/set-master-to-bundle
POST /core-casc-effective-bundle-export
POST /core-casc-effective-bundle-export/downloadFile/
POST /export/download
POST /casc-bundle-mgnt/casc-bundle-validate
{
    "bundles":[
        {
            "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
            "regex": "folder1/.*",
            "name": "casc-bundle-java",
            "availabilityPatternFromYaml": true,
            "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
            "token": "",
            "usedBy": [
                "folder1/controller1"
            ],
            "availableFor": [
                "folder1/controller1",
                "folder1/controller2"
            ]
        }
    ]
}
{
    "update-log-status": "ENABLED",
    "retention-policy": 10,
    "versions": [
        {
            "version": "6",
            "date": "09 May 2022",
            "errors": 0,
            "warnings": 0,
            "folder": "20220509_00006"
        },
        {
            "version": "5",
            "date": "09 May 2022",
            "errors": 1,
            "warnings": 0,
            "folder": "20220509_00005"
        },
        {
            "version": "4",
            "date": "09 May 2022",
            "errors": 0,
            "warnings": 0,
            "folder": "20220509_00004"
        },
        {
            "version": "3",
            "date": "09 May 2022",
            "errors": 1,
            "warnings": 0,
            "folder": "20220509_00003"
        },
        {
            "version": "2",
            "date": "09 May 2022",
            "errors": 0,
            "warnings": 0,
            "folder": "20220509_00002"
        },
        {
            "version": "1",
            "date": "09 May 2022",
            "errors": 0,
            "warnings": 0,
            "folder": "20220509_00001"
        }
    ]
}
{
    "update-available": true,
    "versions": {
        "current-bundle": {
            "version": "2",
            "validations": []
        },
        "new-version": {
            "version": "5",
            "valid": true,
            "validations": [
                "WARNING - [CATALOGVAL] - More than one plugin catalog file used in zip-core-casc-1652255664849. Using only first read file."
           ]
        }
     },
     "update-type": "RELOAD"
}
{
    "validation-log": [
        {
            "bundle-id": "casc-bundle-java",
            "records": [
                {
                    "version": "3",
                    "errors": 0,
                    "warnings": 0,
                    "folder": "20220607_00003",
                    "date": "07 June 2022"
                },
                {
                    "version": "2",
                    "errors": 0,
                    "warnings": 1,
                    "messages": [
                        "WARNING - [CONTVAL] - Unreferenced files/folders unknown.yaml found in bundle folder."
                    ],
                    "folder": "20220607_00002",
                    "date": "07 June 2022"
                },
                {
                    "version": "1",
                    "errors": 1,
                    "warnings": 1,
                    "messages": [
                        "WARNING - [CONTVAL] - Unreferenced files/folders unknown.yaml found in bundle folder.",
                        "ERROR - [APIVAL] - 'apiVersion' property in the bundle.yaml file must be an integer."
                    ],
                    "folder": "20220607_00001",
                    "date": "07 June 2022"
                }
            ],
            "controllers": [
                {
                    "controller": "controller-AB01",
                    "records": [
                        {
                            "bundle": "casc-bundle-java",
                            "assigned": true,
                            "version": "0d4b2b2d6f8ba0872a33120a0548a483",
                            "errors": 0,
                            "warnings": 1,
                            "messages": [
                                "WARNING - [PLUGINVAL] - Plugin casc-bundle-java is not in the CloudBees Assurance Program (CAP) or in applicable plugin catalog(s)"
                            ],
                            "folder": "20220725_00002",
                            "date": "25 July 2022"
                        }
                    ]
                }
            ]
        }
    ]
}
{
    "validation-log": [
        {
            "controller": "controller-AB01",
            "records": [
                {
                    "bundle": "casc-bundle-java",
                    "assigned": true,
                    "version": "3",
                    "errors": 0,
                    "warnings": 0,
                    "folder": "20220607_00003",
                    "date": "07 June 2022"
                },
                {
                    "bundle": "casc-bundle-java-02",
                    "assigned": false,
                    "version": "2",
                    "errors": 0,
                    "warnings": 1,
                    "messages": [
                        "WARNING - [CONTVAL] - Unreferenced files/folders unknown.yaml found in bundle folder."
                    ],
                    "folder": "20220607_00002",
                    "date": "07 June 2022"
                },
                {
                    "bundle": "casc-bundle-java-01",
                    "assigned": false,
                    "version": "1",
                    "errors": 1,
                    "warnings": 1,
                    "messages": [
                        "WARNING - [CONTVAL] - Unreferenced files/folders unknown.yaml found in bundle folder.",
                        "ERROR - [APIVAL] - 'apiVersion' property in the bundle.yaml file must be an integer."
                    ],
                    "folder": "20220607_00001",
                    "date": "07 June 2022"
                }
            ]
        }
    ]
}
{
    "url": "https://my-operation-center.com/zip-bundle/   0e9f58f059c8d91170d4c4b68c6766fb/folder1/{CTRL}1"
    "token": "bc1d6f32-0d6d-4580-b25c-423282ea3925"
}
# bundle.yaml
apiVersion: "1"
id: "jenkins"
description: "Autogenerated bundle descriptor"
version: "1"
jcasc:
  - "jenkins.yaml"
plugins:
  - "plugins.yaml"
catalog:
  - "plugin-catalog.yaml"
rbac:
  - "rbac.yaml"
items:
  - "items.yaml"

# jenkins.yaml
...
{
    "remotes: [
        {
            "name": "my-local-bundle-sources",
            "bundles": [
                {
                    "bundleName": "bundle-1",
                    "localText": "2022-09-20T15: 16: 27.318"
                },
                {   "bundleName": "bundle-2",
                    "localText": "2022-09-20T15: 16: 27.318"
                }
            ]
        }
    ]
}
Instead of a response, the zip bundle is downloaded to the download.zip file.
{
    "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
    "regex": "folder1/.*",
    "name": "casc-bundle-java",
    "availabilityPatternFromYaml": true,
    "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
    "token": ""
}
{
    "controllers": [
        "folder1/controller1",
        "folder1/controller2"
    ]
}
{
    "visibility": true
}
{
    "controllers": [
        "folder1/controller1",
        "folder1/controller2"
    ]
}
{
    "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
    "regex": "folder1/.*",
    "name": "casc-bundle-java",
    "availabilityPatternFromYaml": true,
    "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
    "token": ""
}
{
    "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
    "regex": "folder1/.*",
    "name": "casc-bundle-java",
    "availabilityPatternFromYaml": true,
    "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
    "token": ""
}
{
    "valid": false,
    "structureValidations": [
        {
            "level": "WARNING",
            "validationCode": "BUNDLE_STRUCTURE",
            "message": "[STRUCTURE] - The following files have been detected in the bundle folder but they are not yaml files: sample.txt."
        },
        {
            "level": "WARNING",
            "validationCode": "BUNDLE_CONTENT",
            "message": "[CONTVAL] - Not referenced file/folder sample.txt found in bundle folder"
        }
    ],
    "controllerValidations": [
        {
            "controller": "online-ok-controller",
            "controllerStatus": "ONLINE",
            "validations": []
        },
        {
            "controller": "online-ko-controller",
            "controllerStatus": "ONLINE",
            "validations": [
                {
                    "level": "ERROR",
                    "validationCode": "ITEMS",
                    "message": "[ITEMS] - Impossible to parse file name or missing removeStrategy attribute. Please review the file format."
                }
            ]
        },
        {
            "controller": "offline-controller",
            "controllerStatus": "OFFLINE",
            "validations": []
        }
    ]
}
{
    "reloaded": true
}
{
    "basePath": "/folder1"
}
{
    "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
    "regex": "folder1/.*",
    "name": "casc-bundle-java",
    "availabilityPatternFromYaml": true,
    "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
    "token": ""
}
Instead of a response, the zip bundle is downloaded to the download.zip file.
apiVersion: "1"
id: "oc"
description: "Operations Center Bundle"
version: "1.3"
items:
  - "items/items.yaml"
catalog:
  - "catalog/plugin-catalog.yaml"
kind: folder
name: self-service
description: Managed Controller Self Service folder
displayName: Self Service
groups:
- roles:
  - name: selfservice
    grantedAt: current
  name: SelfService
properties:
- envVars: {
    }
- kubernetesFolderProperty: {
    }
- itemRestrictions:
    allowedTypes:
    - com.cloudbees.opscenter.server.model.ManagedMaster
    filter: true
{
    "valid": false,
    "validation-messages": [
        "ERROR - [APIVAL] - 'apiVersion' property in the bundle.yaml file must be an integer.",
        "WARNING - [JCASC] - It is impossible to validate the Jenkins configuration. Please review your Jenkins and plugin configurations. Reason: jenkins: error configuring 'jenkins' with class io.jenkins.plugins.casc.core.JenkinsConfigurator configurator"
    ]
}

Response model

Table 3. Response model
Element Type Description

assigned

boolean

If assigned is true, the current validation log is the result of an effective bundle that is currently assigned to a controller. If not, assigned is false. This optional attribute is available with the CloudBees CasC Server Plugin, version 1.76 and later.

availableFor

array of objects

Controllers that can be assigned to the bundle based on the availability pattern.

availabilityPatternFromYaml

string

Returns true if the availability pattern is defined in the bundle.yaml file. Returns false if the availability pattern is defined in the UI or using the /casc-bundle/set-availability-pattern request.

bundles

array of objects

All bundles available on the operations center.

controllers

array of objects

The full paths of all controllers that can use the bundle.

linkFileContent

string

Contains two entries in string format wrapped in quotes and separated by newline characters: url and token. The url is the bundle URL where the operations center exposes its content. The token is the access token for the bundle.

name

string

The name of the folder that contains the CasC bundle. For example, casc-bundle-java.

regex

string

The full path to one or more controllers in the operations center that can use the bundle. This must be a regular expression. It defines the bundles you can assign to a controller. For example, folder1/.*.

token

string

The access token for the bundle.

url

string

The bundle URL where the operations center exposes its content.

usedBy

string

The names of controllers assigned to the bundle.

visibility

string

The default global availability pattern behavior for the bundle.

Status and error codes

Table 4. Status and error codes
Code Description

200

Success

403

Not authorized. Administrator permission required.

404

The provided controller path, endpoint, or method cannot be found.

500

Server error.

Examples for configuring a controller using CasC

Once the CasC bundle has been configured in the operations center, you can define an availability pattern to make the bundle available to controllers, assign the bundle to a controller, and specify a default bundle.

  1. Send the GET /casc-bundle/list request to list all available CasC bundles on the operations center. For example:

    curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle/list"

    In this example, there is one bundle named casc-bundle-java:

    {
        "bundles":[
            {
                "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
                "regex": "",
                "name": "casc-bundle-java",
                "availabilityPatternFromYaml": true,
                "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
                "token": "",
                "usedBy": [],
                "availableFor": []
            }
        ]
    }
  2. Define the availability pattern for the bundle. You have two options:

    • Option 1: Send the POST /casc-bundle/set-availability-pattern request to define the path to the controllers that can use the bundle. For example:

      curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-availability-pattern?bundleId=casc-bundle-java&regex=folder1.*"

      If successful, a list of all controllers that can use the bundle is returned:

      {
          "controllers": [
              "folder1/controller1",
              "folder1/controller2"
          ]
      }
    • Option 2: Send the POST /casc-bundle/set-global-availability-pattern-behavior request to define the default global availability pattern behavior for bundles that do not have an availability pattern defined. This option provides more flexibility, but is less secure. For example:

      curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-global-availability-pattern-behavior?visibility=true"

      If successful, the default global availability pattern behavior is returned:

      {
          "visibility": true
      }
  3. Send the POST /casc-bundle/set-controller-to-bundle request to assign a bundle to a controller. For example:

    curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-controller-to-bundle?bundleId=casc-bundle-java&controllerPath=folder1/controller1"

    If successful, the bundle information is returned:

    {
        "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
        "regex": "folder1/.*",
        "name": "casc-bundle-java",
        "availabilityPatternFromYaml": true,
        "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
        "token": ""
    }
  4. Send the GET /casc-bundle/list request again. For example:

    curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XGET "https://my-operation-center.com/casc-bundle/list"

    The casc-bundle-java bundle is now assigned to folder/controller1 and also available for assignment to folder1/controller2, based on the availability pattern you defined.

    {
        "bundles":[
            {
                "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
                "regex": "folder1/.*",
                "name": "casc-bundle-java",
                "availabilityPatternFromYaml": true,
                "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
                "token": "",
                "usedBy": [
                    "folder1/controller1"
                ],
                "availableFor": [
                    "folder1/controller1",
                    "folder1/controller2"
                ]
            }
        ]
    }
  5. Optionally, specify a default bundle to pre-select a bundle in the controller configuration screen when setting up a new controller. For example, to specify casc-bundle-java as the default bundle, send the POST /casc-bundle/set-default-bundle request:

    curl --user "admin:rG57xFa2eFrCeWjG4NKU5QMJeW9TzfSkym" -XPOST "https://my-operation-center.com/casc-bundle/set-default-bundle?bundleId=casc-bundle-java"

    If successful, the default bundle information is returned:

    {
        "linkFileContent": "url: \"https://my-operation-center.com/config-bundle/casc-bundle-java\"\ntoken: \"\"\n",
        "regex": "folder1/.*",
        "name": "casc-bundle-java",
        "availabilityPatternFromYaml": true,
        "url": "https://my-operation-center.com/config-bundle/casc-bundle-java",
        "token": ""
    }
In August 2020, the Jenkins project voted to replace the term master with controller. We have taken a pragmatic approach to cleaning these up, ensuring the least amount of downstream impact as possible. CloudBees is committed to ensuring a culture and environment of inclusiveness and acceptance - this includes ensuring the changes are not just cosmetic ones, but pervasive. As this change happens, please note that the term master has been replaced through the latest versions of the CloudBees documentation with controller (as in managed controller, client controller, team controller) except when still used in the UI or in code.