====== Ansible Semaphore API 手動執行整理 ======
* API Swagger - https://www.semui.co/api-docs/
===== 使用 curl 方式來呼叫 API =====
* 假設直接在 Semaphore 主機內呼叫 curl, 所以 API URL - http://localhost:3000/api/
==== 1. Auth to generate a cookie ====
* 將 cookie 產生到 ./semaphore-cookie
* 登入帳號與密碼為 admin / myP@ssword
*
curl -v -c ./semaphore-cookie -XPOST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{"auth": "admin", "password": "myP@ssword"}' \
http://localhost:3000/api/auth/login
* ++實際操作畫面|
semaphore-44:~/cli-work# curl -v -c ./semaphore-cookie -XPOST \
> -H 'Content-Type: application/json' \
> -H 'Accept: application/json' \
> -d '{"auth": "admin", "password": "myP@ssword"}' \
> http://localhost:3000/api/auth/login
Note: Unnecessary use of -X or --request, POST is already inferred.
* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:3000...
* Connected to localhost (::1) port 3000
> POST /api/auth/login HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.5.0
> Content-Type: application/json
> Accept: application/json
> Content-Length: 46
>
< HTTP/1.1 204 No Content
< Content-Type: application/json
* Added cookie semaphore="MTcwNDE4NzkwOXw2UlByZHVXdkhIMU5wN2ROZTg1VGdvOEp5SGpXTGpqZEMzM3pIcjNUVmVpQ0ZOb0JwdjBHYmlwLWlsRnpDNDF5MlVSd1ZXdlB4N3k5Y3RFbzhhSlVGUWs9fIEdaH9kKEep32Acl8S5j3WF_LHbfojgVQPs_oJMu9Cw" for domain localhost, path /, expire 0
< Set-Cookie: semaphore=MTcwNDE4NzkwOXw2UlByZHVXdkhIMU5wN2ROZTg1VGdvOEp5SGpXTGpqZEMzM3pIcjNUVmVpQ0ZOb0JwdjBHYmlwLWlsRnpDNDF5MlVSd1ZXdlB4N3k5Y3RFbzhhSlVGUWs9fIEdaH9kKEep32Acl8S5j3WF_LHbfojgVQPs_oJMu9Cw; Path=/
< Date: Tue, 02 Jan 2024 09:31:49 GMT
<
* Connection #0 to host localhost left intact
semaphore-44:~/cli-work# ls -lt
total 8
-rw-r--r-- 1 root root 344 Jan 2 17:31 semaphore-cookie
++
==== 2. Generate an API token ====
* 需要使用到 cookie 檔 ./semaphore-cookie
*
curl -v -b ./semaphore-cookie -XPOST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
http://localhost:3000/api/user/tokens
* ++實際操作畫面|
semaphore-44:~/cli-work# curl -v -b ./semaphore-cookie -XPOST \
> -H 'Content-Type: application/json' \
> -H 'Accept: application/json' \
> http://localhost:3000/api/user/tokens
* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:3000...
* Connected to localhost (::1) port 3000
> POST /api/user/tokens HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.5.0
> Cookie: semaphore=MTcwNDE4NzkwOXw2UlByZHVXdkhIMU5wN2ROZTg1VGdvOEp5SGpXTGpqZEMzM3pIcjNUVmVpQ0ZOb0JwdjBHYmlwLWlsRnpDNDF5MlVSd1ZXdlB4N3k5Y3RFbzhhSlVGUWs9fIEdaH9kKEep32Acl8S5j3WF_LHbfojgVQPs_oJMu9Cw
> Content-Type: application/json
> Accept: application/json
>
< HTTP/1.1 201 Created
< Content-Type: application/json
< Date: Tue, 02 Jan 2024 11:31:12 GMT
< Content-Length: 115
<
{"id":"p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=","created":"2024-01-02T11:31:12Z","expired":false,"user_id":1}
* Connection #0 to host localhost left intact
API token 就是所回傳的 id 值 : p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=
++
==== 3. Remove task ====
* 需要使用到 API token : p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=
* 預計刪除 task : 18
*
curl -v -X 'DELETE' 'http://localhost:3000/api/project/1/tasks/18' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
* ++實際操作畫面|
semaphore-44:~/cli-work# curl -v -X 'DELETE' 'http://localhost:3000/api/project/1/tasks/18' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:3000...
* Connected to localhost (::1) port 3000
> DELETE /api/project/1/tasks/18 HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.5.0
> accept: application/json
> Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=
>
< HTTP/1.1 204 No Content
< Content-Type: application/json
< Date: Tue, 02 Jan 2024 11:36:34 GMT
<
* Connection #0 to host localhost left intact
++
==== 4. Remove template ====
* 需要使用到 API token : p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=
* 預計刪除 template : 1
* 屬於這 template 的所有 task 都會一併刪除
*
curl -X 'DELETE' 'http://localhost:3000/api/project/1/templates/1' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
* ++實際操作畫面|
semaphore-44:~/cli-work# curl -X 'DELETE' 'http://localhost:3000/api/project/1/templates/1' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
++
==== 5. Get template ====
* 需要使用到 API token : p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg=
* 預計取得 template : 2
*
curl -X 'GET' 'http://localhost:3000/api/project/1/templates/2' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
* ++實際操作畫面|
semaphore-44:~/cli-work# curl -X 'GET' 'http://localhost:3000/api/project/1/templates/2' -H 'accept: application/json' -H 'Authorization: Bearer p5wyfpx9wge4wu57ytfkx9msmu0efke6yqvzapfd3hg='
{
"id": 2,
"project_id": 1,
"inventory_id": 2,
"repository_id": 1,
"environment_id": 1,
"name": "daliy-update-ubuntu",
"playbook": "upgrade.yml",
"arguments": null,
"allow_override_args_in_task": false,
"description": null,
"vault_key_id": null,
"type": "",
"start_version": null,
"build_template_id": null,
"view_id": 1,
"last_task": {
"id": 28,
"template_id": 2,
"project_id": 1,
"status": "success",
"debug": false,
"dry_run": false,
"diff": false,
"playbook": "",
"environment": "",
"limit": "",
"user_id": null,
"created": "2024-01-02T10:35:00.001752Z",
"start": "2024-01-02T10:35:03.218576Z",
"end": "2024-01-02T10:35:32.726596Z",
"message": "",
"commit_hash": null,
"commit_message": "",
"build_task_id": null,
"version": null,
"arguments": null,
"tpl_playbook": "upgrade.yml",
"tpl_alias": "daliy-update-ubuntu",
"tpl_type": "",
"user_name": null,
"build_task": null
},
"autorun": false,
"survey_vars": null,
"suppress_success_alerts": false
}
++
{{tag>ansible semaphore}}