spinnaker REST API patch pipeline stage - spinnaker

I'm trying to patch a specific stage of a pipeline in spinnaker via its REST API:
curl -X PATCH \
http://localhost:8082/pipelines/45042993-ff77-4cc5-b8f5-cb28b1902173/stages/8 \
-d #/tmp/dtool_spinnaker_pipelinev_stage.json \
-H "Content-Type: application/json" \
--silent \
--show-error
This gets me a 404 error page not found. POST'ing the full pipeline works:
curl -X POST \
http://localhost:8082/pipelines/45042993-ff77-4cc5-b8f5-cb28b1902173 \
-d #/tmp/dtool_spinnaker_pipelinev.json \
-H "Content-Type: application/json" \
--silent \
--show-error
Any idea what I'm doing wrong? The update stage docs is not clear about the stage ID but based on the pipeline JSON, it has to be its refId.

I hope following example will help you. There are 2 examples of PUT and PATCH requests. PATCH modifies stage result and PUT reruns it. There is additional pipeline expected to be run - in my case it waits for 5 second and check input parameter.
{
"expectedArtifacts": [],
"keepWaitingPipelines": false,
"limitConcurrent": true,
"parameterConfig": [
{
"default": "false",
"description": "",
"hasOptions": false,
"label": "success",
"name": "success",
"options": [
{
"value": "false"
},
{
"value": ""
}
],
"pinned": false,
"required": true
}
],
"stages": [
{
"completeOtherBranchesThenFail": false,
"continuePipeline": false,
"failPipeline": false,
"method": "PUT",
"name": "PUT",
"payload": {
"continuePipeline": false,
"failPipeline": true
},
"refId": "3",
"requisiteStageRefIds": [
"7"
],
"stageEnabled": {
"expression": "(#stage('Pipeline')).toString == 'TERMINAL'",
"type": "expression"
},
"statusUrlResolution": "getMethod",
"type": "webhook",
"url": "http://spin-gate:8084/pipelines/${execution.id}/stages/${#stage('Pipeline').id}/restart",
"waitForCompletion": false
},
{
"name": "Wait 2",
"refId": "5",
"requisiteStageRefIds": [
"3",
"6"
],
"type": "wait",
"waitTime": 5
},
{
"application": "ads-demo-app",
"completeOtherBranchesThenFail": false,
"continuePipeline": true,
"failPipeline": false,
"name": "Pipeline",
"pipeline": "d7c5d33c-c250-48d8-a7c3-5e0a951bb806",
"pipelineParameters": {
"success": "false"
},
"refId": "6",
"requisiteStageRefIds": [],
"type": "pipeline",
"waitForCompletion": true
},
{
"method": "PATCH",
"name": "PATCH",
"payload": {
"continuePipeline": false,
"failPipeline": true,
"pipelineParameters": {
"success": "true"
}
},
"refId": "7",
"requisiteStageRefIds": [
"6"
],
"statusUrlResolution": "getMethod",
"type": "webhook",
"url": "http://spin-gate:8084/pipelines/${execution.id}/stages/${#stage('Pipeline').id}"
}
],
"triggers": [],
}

Related

How add a specific variable into Azure Devops Libraries?

In my pipeline (bash, ubuntu-latest) i want to add into already created library a variable (last git commit hash) is it possible ??
Documentation not telling too much about it
You could use this API to update the variable group: https://learn.microsoft.com/en-us/rest/api/azure/devops/distributedtask/variablegroups/update?view=azure-devops-rest-6.0
Use this predefined variable "Build.SourceVersion" to get the latest commit ID: https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml
Bash script:
curl --location --request PUT 'https://dev.azure.com/{OrgName}/{ProjName}t/_apis/distributedtask/variablegroups/{variablegroupsID}?api-version=7.0' \
--header 'Authorization: Basic {Base64PAT}=' \
--header 'Content-Type: application/json' \
--data-raw '{
"variables": {
"test": {
"value": "$(Build.SourceVersion)"
}
},
"id": 5,
"type": "Vsts",
"name": "1013",
"description": "",
"createdBy": {
"displayName": "{displayName}",
"id": "{id}",
"uniqueName": "{uniqueName}"
},
"createdOn": "2022-10-13T07:41:40.3066667Z",
"modifiedBy": {
"displayName": "{displayName}",
"id": "{id}",
"uniqueName": "{uniqueName}"
},
"modifiedOn": "2022-10-13T07:41:40.3066667Z",
"isShared": false,
"variableGroupProjectReferences": [
{
"projectReference": {
"id": "{Proj id}",
"name": "{Proj Name}"
},
"name": "1013",
"description": ""
}
]
}'
Variable group sample:
Running the script via Azure Pipeline (bash, ubuntu-latest)
Result:
Update1

Shopware Store API Search ( INCLUDE | FILTER)

I want to compress the Data of the Shopware Storefront Search API. At the Moment I get about 50.000 Lines of API
How can I compress the Data and just get the JSON Fields I need?
For my App I need only the Fields
Product Number
Product Name
Product Price
Product Description
manufacturer Name
URL
$json->elements[$i]->productNumber;
$json->elements[$i]->name;
$json->elements[$i]->calculatedPrice->totalPrice;
$json->elements[$i]->description;
$json->elements[$i]->manufacturer->name;
$json->elements[$i]->cover->media->thumbnails[3]->url;
$json->elements[$i]->seoUrls[0]->seoPathInfo;
My API Call:
curl --location --request POST 'https://my-url.com/store-api/search?search=sofa&limit=4' \
--header 'sw-access-key: ***Shopware-Key***' \
--header 'Accept: application/json' \
--header 'sw-include-seo-urls: true' \
--header 'Content-Type: application/json' \
--header 'Cookie: _GRECAPTCHA=1' \
I tryed to insert a API Body
like the Example Code but gets ignored.
--data '{
"page": 1,
"limit": 1,
"filter": [
{
"type": "string",
"field": "string",
"value": "string"
}
],
"sort": [
{
"field": "string",
"order": "string",
"naturalSorting": true
}
],
"post-filter": [
{
"type": "string",
"field": "string",
"value": "string"
}
],
"associations": {},
"aggregations": [
{
"name": "string",
"type": "string",
"field": "string"
}
],
"grouping": [
"string"
],
"order": "string",
"p": 1,
"manufacturer": "string",
"min-price": 0,
"max-price": 0,
"rating": 0,
"shipping-free": false,
"properties": "string",
"manufacturer-filter": true,
"price-filter": true,
"rating-filter": true,
"shipping-free-filter": true,
"property-filter": true,
"property-whitelist": "string",
"reduce-aggregations": "string",
"no-aggregations": "string",
"only-aggregations": "string",
"search": "string"
}'
I do suggest using some kind of tool to compose your queries. Something like Postman will work. After you are done playing, you can export the working query from Postman to CURL as well.
I believe you are looking for the includes filter. Here is a documentation URL for the full article.
I played around a little, but could not filter out sub-queries per your request. I bet it is possible, but you'll have to play around with it yourself as it will require some time :)
curl --location --request POST 'http://website.com/store-api/product' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'sw-access-key: XXXX' \
--data-raw '{
"limit": 1,
"includes": {
"product": ["name", "productNumber", "calculatedPrice", "manufacturer", "cover", "description", "seoUrls"]
},
"associations": {
"manufacturer": {},
"seoUrls": {}
}
}'

How to get exact index match of list of objects using curl command?

Here I'm using curl command to call api for fetch exact index match of list of objects like [{},{}]
This is the result of Api Json data
{
"results": [
{
"description": "ncc",
"id": "9cac6ca5-29e2-4062-9326-5f443a5bdc8a",
"artifactId": "e65262ea-68a3-41f3-82b9-18844139c9b7",
"artifactType": "packages",
"displayTypeName": "Workflow Package",
"operationId": "execute_workflow",
"input": [
{
"name": "vnfName",
"value": "NCC",
"group": "default"
},
{
"name": "healthAdditionalParams",
"value": {},
"group": "default"
},
{
"name": "healingAdditionalParams",
"value": {},
"group": "default"
}
],
"additionalParameters": [],
"targetResourceId": "4659b03b-760c-4891-8fda-80305e61468a",
"output": [],
"state": "EXECUTING",
"externalId": null,
"jobId": 493,
"workflowExecutionId": "8afb4eab-4e93-4d67-99fa-face2abb72a8",
"realm": "ncom",
"lastModifiedTime": 1642587522000,
"creationTime": 1642587522000,
"lastModifiedUser": "adminuser",
"deletedAt": null,
"batchOperationsMetadataId": "084cae73-ffa1-4da6-bc92-21ab62a00349",
"scheduleId": null
}]}
I used the below curl command to read these data
curl --location --request -v -k -X GET 'http://localhost/api/v1/aes/?query=state:eq:EXECUTING&query=input[0].value:eq:NCC'\
--header 'Content-Type:application/json'\
--header 'Accept:application/json'\
--header 'Authorization:Bearer eyJhb...'\
When I call above curl command I facing issue so anyone help me to find exact match of input[0].value:eq:'NCC'

How to get Execution details through API Calls in Rundeck

I am trying to create a dashboard, for which i am getting all the details using API in Rundeck
and then want to write the data in Csv File,
here is an example trying to fetch data for weekly basis, which is not working [ error msg: {"error":true,"apiversion":35,"errorCode":"api.error.invalid.request","message":"Invalid API Request: /api/35/executions/1w"}],kindly let me know what am i doing wrong to fetch details on weekly, monthly and daily basis
format
#!/bin/sh
protocol="http"
rdeck_host="machinexyz.local"
rdeck_port="4440"
rdeck_api="35"
rdeck_token="token"
rdeck_project="projectRun"
xy="1w"
curl -s --location --request GET "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/$xy" \
--header "Accept: application/json" \
--header "X-Rundeck-Auth-Token: $rdeck_token
Thanks
Following the documentation you could use the recentFilter parameter on your API call, I did an example (at the end I added the jq command to "beautify" the default output):
#!/bin/sh
# protocol
protocol="http"
# basic rundeck info
rdeck_host="localhost"
rdeck_port="4440"
rdeck_api="36"
rdeck_token="ni28E9M5s5H0s3kyCKQ0tbfPCI8jNZS1"
# specific api call info
rdeck_project="ProjectEXAMPLE"
time="1h"
# api call
curl -s --location --request GET "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/executions?recentFilter=$time" \
--header "Accept: application/json" \
--header "X-Rundeck-Auth-Token: $rdeck_token" \
--header "Content-Type: application/json" | jq
Output:
{
"paging": {
"count": 2,
"total": 2,
"offset": 0,
"max": 20
},
"executions": [
{
"id": 2,
"href": "http://localhost:4440/api/36/execution/2",
"permalink": "http://localhost:4440/project/ProjectEXAMPLE/execution/show/2",
"status": "succeeded",
"project": "ProjectEXAMPLE",
"executionType": "scheduled",
"user": "admin",
"date-started": {
"unixtime": 1608296400032,
"date": "2020-12-18T13:00:00Z"
},
"date-ended": {
"unixtime": 1608296400374,
"date": "2020-12-18T13:00:00Z"
},
"job": {
"id": "f2a837d2-1a9c-4387-89d7-0243bbfe6ba9",
"averageDuration": 590,
"name": "HelloWorld",
"group": "",
"project": "ProjectEXAMPLE",
"description": "",
"href": "http://localhost:4440/api/36/job/f2a837d2-1a9c-4387-89d7-0243bbfe6ba9",
"permalink": "http://localhost:4440/project/ProjectEXAMPLE/job/show/f2a837d2-1a9c-4387-89d7-0243bbfe6ba9"
},
"description": "echo \"hi\"",
"argstring": null,
"serverUUID": "94ac86b1-56e9-4bc3-9a4c-50cd7c8a5b59",
"successfulNodes": [
"localhost"
]
},
{
"id": 1,
"href": "http://localhost:4440/api/36/execution/1",
"permalink": "http://localhost:4440/project/ProjectEXAMPLE/execution/show/1",
"status": "succeeded",
"project": "ProjectEXAMPLE",
"executionType": "scheduled",
"user": "admin",
"date-started": {
"unixtime": 1608295800075,
"date": "2020-12-18T12:50:00Z"
},
"date-ended": {
"unixtime": 1608295800914,
"date": "2020-12-18T12:50:00Z"
},
"job": {
"id": "f2a837d2-1a9c-4387-89d7-0243bbfe6ba9",
"averageDuration": 590,
"name": "HelloWorld",
"group": "",
"project": "ProjectEXAMPLE",
"description": "",
"href": "http://localhost:4440/api/36/job/f2a837d2-1a9c-4387-89d7-0243bbfe6ba9",
"permalink": "http://localhost:4440/project/ProjectEXAMPLE/job/show/f2a837d2-1a9c-4387-89d7-0243bbfe6ba9"
},
"description": "echo \"hi\"",
"argstring": null,
"serverUUID": "94ac86b1-56e9-4bc3-9a4c-50cd7c8a5b59",
"successfulNodes": [
"localhost"
]
}
]
}

Pocket API JSON parsing

I am trying to parse the JSON from the Pocket API to keep up with my bookmarks. The JSON recieved after a curl request looks like this:
"list": {
"1548784635": {
"item_id": "1548784635",
"resolved_id": "1548784635",
"given_url": "https://stackoverflow.com/questions/28164849/using-jq-to-par
se-and-display-multiple-fields-in-a-json-serially",
"given_title": "Using jq to parse and display multiple fields in a json se
rially - Stack Ov",
"favorite": "0",
"status": "0",
"time_added": "1542244328",
"time_updated": "1542244341",
"time_read": "0",
"time_favorited": "0",
"sort_id": 0,
"resolved_title": "Using jq to parse and display multiple fields in a json
serially",
"resolved_url": "https://stackoverflow.com/questions/28164849/using-jq-to-
parse-and-display-multiple-fields-in-a-json-serially",
"excerpt": "Using jq I'd like to display first and last name serially. Lik
e so - You can use addition to concatenate strings.",
"is_article": "1",
"is_index": "0",
"has_video": "0",
"has_image": "1",
"word_count": "313",
"lang": "en",
"top_image_url": "https://cdn.sstatic.net/Sites/stackoverflow/img/apple-to
uch-icon#2.png?v=73d79a89bded",
"tags": {
"fields": {
"item_id": "1548784635",
"tag": "fields"
},
"jq": {
"item_id": "1548784635",
"tag": "jq"
},
"multiple": {
"item_id": "1548784635",
"tag": "multiple"
}
},
"authors": {
"45850780": {
"item_id": "1548784635",
"author_id": "45850780",
"name": "abraham",
"url": "https://stackoverflow.com/users/26406/abraham"
},
"82251593": {
"item_id": "1548784635",
"author_id": "82251593",
"name": "San",
"url": "https://stackoverflow.com/users/3713971/san"
}
},
"image": {
"item_id": "1548784635",
"src": "https://i.stack.imgur.com/rZUli.jpg?s=32&g=1",
"width": "32",
"height": "32"
},
"images": {
"1": {
"item_id": "1548784635",
"image_id": "1",
"src": "https://i.stack.imgur.com/rZUli.jpg?s=32&g=1",
"width": "32",
"height": "32",
"credit": "",
"caption": ""
}
},
"domain_metadata": {
"name": "Stack Overflow",
"logo": "https://logo.clearbit.com/stackoverflow.com?size=800",
"greyscale_logo": "https://logo.clearbit.com/stackoverflow.com?size=800&
greyscale=true"
},
"listen_duration_estimate": 121
},
...
I am trying to get the output to look like this with the uri over the tags (trying to transform to csv):
https://stackoverflow.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially
fields, jq, multiple
I tried this but the tags are nested (the consumer_key & access_token are redacted):
curl https://getpocket.com/v3/get --insecure -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d "{\"consumer_key\":\"*\", \"access_token\":\"*\", \"detailType\":\"complete\"}" | jq '.list[] | "\(.given_url) \(.tags)"'
Using your sample input after rectification to make it valid JSON:
jq -r '.list[] | [.given_url] + (.tags|keys_unsorted) | #csv' input.json
yields:
"https://stackoverflow.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially","fields","jq","multiple"
This is valid CSV. If you don't want all the double quotation marks, you can use string interpolation as in your attempt.
I added a ?. This works (even for entries without tags). The access_token and consumer_key are redacted in the curl command.
NOTE: the consumer_key & the access_token have each been replace with *
curl https://getpocket.com/v3/get --insecure -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d "{\"consumer_key\":\"80793-861ab2c92e846c8324b417e8\", \"access_token\":\"b6b55049-fe0a-df88-8f78-eb9ccc\", \"detailType\":\"complete\"}" | jq -r '.list[] | [.given_url] + (.tags|keys_unsorted?) | #csv' | less
From the jq manual:
.[]?
Like .[], but no errors will be output if . is not an array or object.