Skip to content

Instantly share code, notes, and snippets.

@vishnu2kmohan
Last active May 1, 2017 18:14
Show Gist options
  • Select an option

  • Save vishnu2kmohan/422f21b1a3a2e55af48007a6c9ec8ac9 to your computer and use it in GitHub Desktop.

Select an option

Save vishnu2kmohan/422f21b1a3a2e55af48007a6c9ec8ac9 to your computer and use it in GitHub Desktop.
janitor
## list-completed-non-star-frameworks.sh
#/usr/bin/env bash
set -o errexit -o nounset -o pipefail
curl -skSL \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" \
-H "Content-Type: application/json" \
$(dcos config show core.dcos_url)/mesos/state | \
jq -er '[.completed_frameworks[] | select(.role!="*") | {id: .id, name: .name, role: .role, principal: .principal, active: .active}]' \
> completed-non-star-frameworks.json
## template-janitor-marathon.json
{
"id": "/janitor-__NAME__",
"cmd": "sed -i s/marathon_url,/url,/g /janitor.py && /janitor.py -v -r __ROLE__ -p __PRINCIPAL__ -z __ZNODE__ --auth_token=__TOKEN__",
"cpus": 1,
"mem": 128,
"disk": 1,
"instances": 1,
"container": {
"docker": {
"image": "mesosphere/janitor:latest",
"network": "HOST"
},
"type": "DOCKER"
}
}
## generate-janitor-marathon-json.sh
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
framework_json=$1
jq -er '. | keys[]' "${1}" | while read key ; do
id=$(jq -er ".[$key].id" "${framework_json}")
name=$(jq -er ".[$key].name" "${framework_json}")
role=$(jq -er ".[$key].role" "${framework_json}")
principal=$(jq -er ".[$key].principal" "${framework_json}")
znode="dcos-service-${name}"
token=$(dcos config show core.dcos_acs_token)
echo "Setting up janitor to cleanup framework: ${id} ${name} ${role} ${principal} ${znode}"
sed -e "s|__ROLE__|${role}|g" \
-e "s|__PRINCIPAL__|${principal}|g" \
-e "s|__ZNODE__|${znode}|g" \
-e "s|__TOKEN__|${token}|g" \
-e "s|__NAME__|${name}|g" \
template-janitor-marathon.json > "janitor-${name}-marathon.json"
done
## Add janitor app definitions to Marathon
## add-janitors-to-marathon.sh
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
for i in janitor*.json
do
dcos marathon app add $i
done
## Remove janitor apps from Marathon
## remove-janitor-apps-from-marathon.sh
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
for i in $(dcos marathon app list --json | jq -er '.[] | select(.id | match("janitor")) | .id')
do
dcos marathon app remove $
done
# Cleanup frameworks directly (without using Marathon/Docker) using https://github.com/mesosphere/framework-cleaner/raw/master/janitor.py
# cleanup-frameworks.sh
#!/usr/bin/env bash
set -o nounset -o pipefail
master_url=$(dcos config show core.dcos_url)/mesos/
marathon_url=$(dcos config show core.dcos_url)/marathon/v2/apps/
exhibitor_url=$(dcos config show core.dcos_url)/exhibitor/
token=$(dcos config show core.dcos_acs_token)
jq -er '. | keys[]' "${1}" | while read -r key ; do
id=$(jq -er ".[$key].id" "${1}")
name=$(jq -er ".[$key].name" "${1}")
role=$(jq -er ".[$key].role" "${1}")
principal=$(jq -er ".[$key].principal" "${1}")
znode="dcos-service-${name}"
echo "Cleaning up ${id} ${name} ${role} ${principal} ${znode}"
python janitor.py \
-v \
-m "${master_url}" \
-n "${marathon_url}" \
-e "${exhibitor_url}" \
-r "${role}" \
-p "${principal}" \
-z "${znode}" \
--auth_token="${token}"
done
## list-inactive-non-star-frameworks.sh
#/usr/bin/env/bash
set -o errexit -o nounset -o pipefail
curl -skSL \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" \
-H "Content-Type: application/json" \
$(dcos config show core.dcos_url)/mesos/state | \
jq -er '[.frameworks[] | select(.active==false) | select(.role!="*") | {id: .id, name: .name, role: .role, principal: .principal, active: .active}]' \
> inactive-non-star-frameworks.json
## teardown-inactive-frameworks.sh
#!/usr/bin/env bash
set -o nounset -o pipefail
master_url=$(dcos config show core.dcos_url)/mesos/
token=$(dcos config show core.dcos_acs_token)
jq -er '. | keys[]' "${1}" | while read -r key ; do
id=$(jq -er ".[$key].id" "${1}")
name=$(jq -er ".[$key].name" "${1}")
role=$(jq -er ".[$key].role" "${1}")
principal=$(jq -er ".[$key].principal" "${1}")
echo "Tearing down inactive framework: ${id} ${name} ${role} ${principal}"
curl -skSL \
-X POST \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" \
-H "Content-Type: application/json" \
-d "frameworkId=${id}" \
"${master_url}/master/teardown"
done
## list-znodes.sh
#/usr/bin/env bash
set -o errexit -o nounset -o pipefail
curl -skSL \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" \
-H "Content-Type: application/json" \
$(dcos config show core.dcos_url)/exhibitor/exhibitor/v1/explorer/node?key=/ | \
jq -er '.'
## list-spark-znodes.sh
#/usr/bin/env bash
set -o errexit -o nounset -o pipefail
curl -skSL \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" \
-H "Content-Type: application/json" \
$(dcos config show core.dcos_url)/exhibitor/exhibitor/v1/explorer/node?key=/ | \
jq -er '[ .[] | select(.key | match("spark_mesos_dispatcher")) ]' \
> spark-dispatcher-znodes.json
## remove-znodes.sh
#!/usr/bin/env bash
set -o nounset -o pipefail
master_url=$(dcos config show core.dcos_url)/mesos/
marathon_url=$(dcos config show core.dcos_url)/marathon/v2/apps/
exhibitor_url=$(dcos config show core.dcos_url)/exhibitor/
token=$(dcos config show core.dcos_acs_token)
jq -er '. | keys[]' "${1}" | while read -r key ; do
znode=$(jq -er ".[$key].title" "${1}")
echo "Removing Znode: ${znode}"
python janitor.py \
-v \
-m "${master_url}" \
-n "${marathon_url}" \
-e "${exhibitor_url}" \
-z "${znode}" \
--auth_token="${token}"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment