Task Type: updateApplication
A policy call is made for this type anytime a user attmpts to edit an existing application.
- Path: tasks
- Method: Post
- Package: spinnaker.http.authz
Example Payload
Click to expand
{
  "input": {
    "body": {
      "application": "aftest2",
      "description": "Update Application: aftest2",
      "job": [
        {
          "application": {
            "cloudProviders": "kubernetes",
            "dataSources": {
              "disabled": [],
              "enabled": []
            },
            "description": "description2",
            "email": "dasdasd@trest.com",
            "instancePort": 80,
            "lastModifiedBy": "myUserName",
            "name": "aftest2",
            "permissions": {
              "EXECUTE": [
                "productmanagers"
              ],
              "READ": [
                "productmanagers"
              ],
              "WRITE": [
                "productmanagers"
              ]
            },
            "repoProjectKey": "project",
            "repoSlug": "name",
            "repoType": "github",
            "trafficGuards": [],
            "updateTs": "1621444448000",
            "user": "myUserName"
          },
          "type": "updateApplication",
          "user": "myUserName"
        }
      ]
    },
    "method": "POST",
    "path": [
      "tasks"
    ],
    "user": {
      "isAdmin": false,
      "roles": [
        {
          "name": "armory-io",
          "source": "GITHUB_TEAMS"
        },
        {
          "name": "productmanagers",
          "source": "GITHUB_TEAMS"
        }
      ],
      "username": "myUserName"
    }
  }
}
Example Policy
This policy disables the ability to create new applications, or update existing applications unless the applications have specified at least 1 role with ‘write’ permissions.
Note: The UI is not currently able to display an error message when this policy denies the action.
package spinnaker.http.authz
allow = message==""
default message=""
message="You must provide at least 1 user with full execute permissions"{
  not(hasWritePermissions(input.body.job[0]))
  createsTaskOfType(["createApplication","updateApplication"][_])
}
hasWritePermissions(job) {
  count(job.application.permissions.WRITE)>0
}
createsTaskOfType(tasktype){
    input.method="POST"
    input.path=["tasks"]
    input.body.job[_].type=tasktype
}
Keys
| Key | Type | Description | 
|---|---|---|
| input.body.application | string | The name of the application being created. | 
| input.body.description | string | The description of the application being created. | 
| input.body.job[].application.cloudProviders | string | The application’s allowed cloud providers. | 
| input.body.job[].application.email | string | The email address of the owner of the application. | 
| input.body.job[].application.instancePort | number | |
| input.body.job[].application.name | string | The name of the application being created. | 
| input.body.job[].type | string | The type of task being run, in this case “createApplication”. | 
| input.body.job[].user | string | The ID of the user to run the job as. | 
| input.method | string | The HTTP method by which the API is being called. When creating a task this is POST | 
| input.path[] | string | The API path of the job. When creating a new task this is the array ["tasks"] | 
| input.user.isAdmin | boolean | |
| input.user.roles[].name | string | |
| input.user.roles[].source | string | |
| input.user.username | string | |
| input.body.job[].application.description | string | The description of the application being created. | 
| input.body.job[].application.permissions.EXECUTE[] | string | The list of roles that have execute permission to the application. | 
| input.body.job[].application.permissions.READ[] | string | The list of roles that have read permission to the application. | 
| input.body.job[].application.permissions.WRITE[] | string | The list of roles that have write permission to the application. | 
| input.body.job[].application.repoProjectKey | string | What is the unique ID of the project in source control. | 
| input.body.job[].application.repoSlug | string | What is the slug for the source code repo? Typically the repository’s owner or organization ID. | 
| input.body.job[].application.repoType | string | With what type of sourcecode repo is this application associated. | 
Feedback
Was this page helpful?
Thank you for letting us know!
Sorry to hear that. Please tell us how we can improve.
Last modified August 18, 2023: (02b163b7)