Servers
Querying server metadata
Overview
Although your Cloud 66 Dashboard provides a complete view of all your applications, it can be useful to query metadata directly from a server. This can be useful for automating task management and status tracking, as well as for investigative tasks like debugging. The special metadata
endpoint allows you to query a server's metadata while you are logged into it (via SSH).
How to query metadata from a server
In order to manually query a server's metadata, you must first log into the server via SSH.
Once on the server, newer Cloud 66 servers will have a metadata server running locally on port 17540
. This metadata server is created and maintained automatically by the Cloud 66 agent running on your server. Note that older servers may still require metadata calls to https://app.cloud66.com/api
For newer servers: Please run the following,
curl localhost:17540/metadata
For older servers: Please run the following, (note the usage of Environment Variables that should be available on your server)
curl -s -H "Accept: application/json" https://$CLOUD66_ACCOUNT_API_KEY:X@app.cloud66.com/api/tooling/metadata/$CLOUD66_APPLICATION_API_KEY
The commands above will return all the available metadata for the server. However, you can also query subsets of the metadata using the names for each element and sub-element. Note that if your application doesn't have a local metadata server available you can replace the examples below with the older server example above.
For example this command:
curl localhost:17540/metadata/deployment/triggered_by
...will return metadata about who triggered the last deployment.
Finally, when querying for metadata, it can be useful to parse the json response. We suggest installing and using jq
for this. To install jq
apt install -y jq
Examples of available metadata
1. deployment information
$ curl localhost:17540/metadata/deployment | jq
`{
"response": {
"finished_at": "2020-07-07T13:40:51Z",
"outcome": {
"code": 1,
"meaning": "success"
},
"source": {
"app": {
"repo": "git://github.com/cloud66-samples/rails-mysql",
"branch": "feature/redis",
"hash": "a99f026df617ffaf9688d6c01fb1c4497189afd8"
}
},
"started_at": "2020-07-07T13:37:35Z",
"triggered_by": "your-email@yourdomain.com",
"triggered_via": {
"code": 0,
"meaning": "web"
}
}
}
2. Server OS information
curl localhost:17540/metadata/server/os | jq
`{
"response": {
"distro": "ubuntu",
"version": "18.04"
}
}
3. Find out who deployed last (or currently)
curl localhost:17540/metadata/deployment/triggered_by | jq -r '.response'
`your-email@yourdomain.com
4. Find out which version of the code is deployed
curl localhost:17540/metadata/deployment/source | jq -r '.response'
Sample for Rails applications
`{
"app": {
"repo": "git://github.com/cloud66-samples/rails-mysql",
"branch": "feature/samples",
"hash": "a99f026df617************1fb1c4497189afd8"
}
}
Sample for Container applications
`{
"webapp1": {
"image": "my/webapp:123"
},
"webapp2": {
"repo": "git://github.com/cloud66-samples/rails-mysql",
"branch": "feature/samples",
"hash": "a99f026df617************1fb1c4497189afd8"
}
}
Using metadata in a workflow
One handy way to call this method is via a deploy hook. For example, you might want to fetch the name of the person who deployed to a server and pass it to a task tracking or audit logging system.
The deploy hook to achieve that would look something like this:
`first_thing:
- target: any
execute: true
apply_during: all
sudo: false
inline: |
#!/usr/bin/env bash
current_deployer=$(curl localhost:17540/metadata/deployment/triggered_by | jq -r '.response')
echo "Deployed by: $current_deployer"
This hook will fire as soon as deployment starts (first_thing
) and will query the triggered_by
field and store the value in a variable. You can then use this variable as you need!