Azure DevOps Pipeline Action
This action allows you to invoke pipelines in your Azure DevOps project.
invoke-azure-devops-pipeline.yaml---
apiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: invoke-azure-devops-pipelines
  namespace: default
spec:
  parameters:
    - name: project
      label: Project name
      default: Demo1
    - name: pipeline
      label: Pipeline ID
  actions:
    - name: Invoke pipeline
      azureDevopsPipeline:
        org: flanksource
        project: '{{.params.project}}'
        token:
          valueFrom:
            secretKeyRef:
              name: azure-devops
              key: token
        pipeline:
          id: '{{.params.pipeline}}'
| Field | Description | Scheme | 
|---|---|---|
name* | Step Name  | string  | 
azureDevopsPipeline | Azure Devops Pipeline Action  | |
delay | A delay before running the action e.g.   | 
  | 
filter | Conditionally run an action  | CEL with Playbook Context  | 
runsOn | Which runner (agent) to run the action on  | |
templatesOn | Where templating (and secret management) of actions should occur  | 
  | 
timeout | Timeout on this action.  | 
AzureDevopsPipeline
| Field | Description | Scheme | 
|---|---|---|
org* | Azure DevOps org name  | string  | 
pipeline* | Azure pipeline to invoke  | |
project* | Azure DevOps project name  | string  | 
token* | Azure DevOps PAT  | |
parameters | Pipeline parameters  | 
Pipeline
| Field | Description | Scheme | Required | Templatable | 
|---|---|---|---|---|
id | Pipeline ID. | string | true | true | 
version | Pipeline version. | string | false | true | 
Parameters
| Field | Description | Scheme | Required | Templatable | 
|---|---|---|---|---|
resources | The resources the run requires. | map[string]any | false | true | 
templateParameters | The template parameters the run requires. | map[string]any | false | true | 
variables | The variables the run requires. | map[string]any | false | true | 
stagesToSkip | The stages to skip. | []string | false | true | 
Templating
CEL Expressions
The following variables can be used within the CEL expressions of filter, if, delays and parameters.default:
| Field | Description | Schema | 
|---|---|---|
config | Config passed to the playbook | ConfigItem | 
component | Component passed to the playbook | Component | 
check | Canary Check passed to the playbook | Check | 
playbook | Playbook passed to the playbook | Playbook | 
run | Current run | Run | 
params | User provided parameters to the playbook | map[string]any | 
request | Webhook request | Webhook Request | 
env | Environment variables defined on the playbook | map[string]any | 
user.name | Name of the user who invoked the action | string | 
user.email | Email of the user who invoked the action | string | 
agent.id | ID of the agent the resource belongs to. | string | 
agent.name | Name of the agent the resource belongs to. | string | 
Conditionally Running Actions
Playbook actions can be selectively executed based on CEL expressions. These expressions must either return
- a boolean value (
trueindicating run the action & skip the action otherwise) - or a special function among the ones listed below
 
| Function | Description | 
|---|---|
always() | run no matter what; even if the playbook is cancelled/fails | 
failure() | run if any of the previous actions failed | 
skip() | skip running this action | 
success() | run only if all previous actions succeeded (default) | 
timeout() | run only if any of the previous actions timed out | 
delete-kubernetes-pod.yaml---
apiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: notify-send-with-filter
spec:
  parameters:
    - name: message
      label: The message for notification
      default: '{{.config.name}}'
  configs:
    - types: 
        - Kubernetes::Pod
  actions:
    - name: Send notification
      exec:
        script: notify-send "{{.config.name}} was created"
    - name: Bad script
      exec:
        script: deltaforce
    - name: Send all success notification
      if: success() # this filter practically skips this action as the second action above always fails
      exec:
        script: notify-send "Everything went successfully"
    - name: Send notification regardless
      if: always()
      exec:
        script: notify-send "a Pod config was created"
Defaulting Parameters
delete-kubernetes-pod.yamlapiVersion:
  mission-control.flanksource.com/v1
  kind: Playbook
  metadata:
    name: edit
  spec:
    title: 'Edit Kustomize Resource'
    icon: flux
    parameters:
    - default: 'chore: update $(.config.type)/$(.config.name)'
      name: commit_message
Go Templating
When templating actions with Go Templates, the context variables are available as fields of the template's context object . eg .config, .user.email
Templating Actions
delete-kubernetes-pod.yamlapiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: scale-deployment
spec:
  description: Scale Deployment
  configs:
    - types:
        - Kubernetes::Deployment
  parameters:
    - name: replicas
      label: The new desired number of replicas.
  actions:
    - name: kubectl scale
      exec:
        script: |
          kubectl scale --replicas={{.params.replicas}} \
            --namespace={{.config.tags.namespace}} \
            deployment {{.config.name}}
Functions
| Function | Description | Return | 
|---|---|---|
getLastAction() | Returns the result of the action that just run | Action Specific | 
getAction({action}) | Return the result of a specific action | Action Specific | 
Reusing Action Results
action-results.yamlapiVersion: mission-control.flanksource.com/v1
kind: Playbook
metadata:
  name: use-previous-action-result
spec:
  description: Creates a file with the content of the config
  configs:
    - types:
        - Kubernetes::Pod
  actions:
    - name: Fetch all changes
      sql:
        query: SELECT id FROM config_changes WHERE config_id = '{{.config.id}}'
        driver: postgres
        connection: connection://postgres/local
    - name: Send notification
      if: 'last_result().count > 0'
      notification:
        title: 'Changes summary for {{.config.name}}'
        connection: connection://slack/flanksource
        message: |
          {{$rows:=index last_result "count"}}
          Found {{$rows}} changes