diff --git a/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml b/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml index d3bfd28..efd88cb 100644 --- a/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml +++ b/murano-apps/CiCdEnvironment/package/Classes/CiCdEnvironment.yaml @@ -187,3 +187,15 @@ Methods: - $applications.select($hosts.applyTo($.instance)) - $._environment.reporter.report($this, 'Hosts added.') + + deleteNodepool: + Usage: Action + Body: + - If: $this.nodepool = null + Then: + - Return: + + - $._environment.reporter.report($this, 'Deleting Nodepool...') + - $this.nodepool.releaseResources() + - $this.nodepool: null + - $._environment.reporter.report($this, 'Nodepool is deleted. Now you can safely delete environment.') diff --git a/murano-apps/Nodepool/package/Classes/Nodepool.yaml b/murano-apps/Nodepool/package/Classes/Nodepool.yaml index ca4abf9..0d150bc 100644 --- a/murano-apps/Nodepool/package/Classes/Nodepool.yaml +++ b/murano-apps/Nodepool/package/Classes/Nodepool.yaml @@ -128,7 +128,18 @@ Methods: - $host: $instance.ipAddresses[0] - Return: $host - destroy: + releaseResources: Body: + # Release resources. + - $resources: new(sys:Resources) + - $template: $resources.yaml('ReleaseResources.template') + - $._environment.reporter.report($this, 'Deleting nodepool-related VMs and Images from tenant...') + - $.instance.agent.call($template, $resources) + - $.instance.releaseResources() + - $._environment.reporter.report($this, 'Done.') - $.reportDestroyed() - $.setAttr(deployed, false) + + destroy: + Body: + - $.releaseResources() diff --git a/murano-apps/Nodepool/package/Resources/ReleaseResources.template b/murano-apps/Nodepool/package/Resources/ReleaseResources.template new file mode 100644 index 0000000..4903e8b --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/ReleaseResources.template @@ -0,0 +1,20 @@ +FormatVersion: 2.1.0 +Version: 1.0.0 +Name: Release resources + +Parameters: + +Body: | + releaseResources() + +Scripts: + releaseResources: + Type: Application + Version: 1.0.0 + EntryPoint: release_resources.sh + Files: + - creds + Options: + captureStdout: false + captureStderr: true + verifyExitcode: true diff --git a/murano-apps/Nodepool/package/Resources/scripts/creds b/murano-apps/Nodepool/package/Resources/scripts/creds new file mode 100644 index 0000000..6c0aa6a --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/creds @@ -0,0 +1,4 @@ +export OS_AUTH_URL=`hiera -c /etc/puppet/hiera.yaml os_auth_url` +export OS_TENANT_NAME=`hiera -c /etc/puppet/hiera.yaml os_tenant_name` +export OS_USERNAME=`hiera -c /etc/puppet/hiera.yaml os_username` +export OS_PASSWORD=`hiera -c /etc/puppet/hiera.yaml os_password` diff --git a/murano-apps/Nodepool/package/Resources/scripts/release_resources.sh b/murano-apps/Nodepool/package/Resources/scripts/release_resources.sh new file mode 100755 index 0000000..7dcf72a --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/release_resources.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +source creds + +set -x + +# Get server ids. +server_ids=$(mysql -u nodepool --password=nodepool nodepool -e 'select external_id from node' | grep -o '[-0-9a-f]\{36\}') +image_ids=$(mysql -u nodepool --password=nodepool nodepool -e 'select external_id from snapshot_image' | grep -o '[-0-9a-f]\{36\}') + +# Get token and service catalog. +resp=$(curl -H "Content-Type: application/json" -X POST $OS_AUTH_URL/tokens --data '{"auth": {"tenantName": "'$OS_TENANT_NAME'", "passwordCredentials": {"username": "'$OS_USERNAME'", "password": "'$OS_PASSWORD'"}}}') + +token=$(echo $resp | json_pp | grep -A15 '"token"' | sed -e '/"tenant"/,+7d' | grep '"id"' | cut -d '"' -f 4) +nova_url=$(echo $resp | json_pp | grep '8774/v2' | grep publicURL | cut -d '"' -f 4) +glance_url=$(echo $resp | json_pp | grep ':9292' | grep publicURL | cut -d '"' -f 4) + +# Clean up servers. +for id in $server_ids +do + curl -X DELETE -H "X-Auth-Token: $token" $nova_url/servers/$id +done + +# Clean up images. +for id in $image_ids +do + curl -X DELETE -H "X-Auth-Token: $token" $glance_url/v1/images/$id +done