Virtual TJBot on IBMcloud環境のアカウントをキレイにする方法

# はじめに
[Virtual TJBot Starter](https://github.com/tjbotfan/virtual-tjbot-starter)を作っているときにアカウントを何個も作るのではなく、
毎回デプロイ済みのサービスを消しては作りということをしていました。
地味に手間がかかるので、この際スクリプト化してしまえ！ということで、本記事を残しておきます。

VirtualTJBotの環境を作り直したい時や、Node-REDのバージョンを上げたい時に使えます。

# 必要なもの
Linux もしくは osxでbashスクリプトが動きibmcloudコマンドが利用できること
私はCentOS8.0で試しました

# 前提
- ライトアカウントでテストしているので他環境では試していません
- ログイン済みアカウントでサービス、CloudFoundry、IAM API Keyなどをすべて消すので、
混在して利用している環境では利用しないでください
- US-SOUTH(ダラス）をログインターゲットのRegionとしています

# 動かし方
## 1. IBMcloudへログインする
```
$ ibmcloud login
```

## 2. シェルの実行
```
$ bash ./reset-vitualtjbot.sh
```

# shellの中身
```bash:reset-vitualtjbot.sh
#!/bin/bash

ibmcloud target -r us-south --cf

ibmcloud resource service-instances
echo -----------------------------------------------------------------------------------------------
IFS=$'\n'
for SERVICE_INSTANCE in `ibmcloud resource service-instances -q | grep service_instance | awk -F '  ' '{print $1}'`
do
        ibmcloud resource service-instance-delete "${SERVICE_INSTANCE}"  -f --recursive
done
echo -----------------------------------------------------------------------------------------------
ibmcloud resource service-instances
echo -----------------------------------------------------------------------------------------------

ibmcloud cf a
for CF_APP in `ibmcloud cf -q a | grep started | awk -F '  ' '{print $1}'`
do
        ibmcloud cf delete "${CF_APP}" -f
done
echo -----------------------------------------------------------------------------------------------
ibmcloud cf a
echo -----------------------------------------------------------------------------------------------

ibmcloud iam service-ids
for SERVICE_ID in `ibmcloud iam service-ids | grep serviceId | awk -F '  ' '{print $1}'`
do
        ibmcloud iam service-id-delete "${SERVICE_ID}" -f
done
echo -----------------------------------------------------------------------------------------------
ibmcloud iam service-ids
echo -----------------------------------------------------------------------------------------------

ibmcloud iam api-keys
for API_KEY in `ibmcloud iam api-keys | grep ApiKey | awk -F '  ' '{print $1}'`
do
        ibmcloud iam api-key-delete "${API_KEY}" -f
done
echo -----------------------------------------------------------------------------------------------
ibmcloud iam api-keys
echo -----------------------------------------------------------------------------------------------
```

# 実行サンプル

## 実行前の画面サンプル
ここにデプロイされているものを全部消しちゃいます。
ゴッソリです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126158/d57c9b16-36cb-c16d-b554-a77c58254a40.png)

## 実行状況サンプル
```
$ bash ./reset-vitualtjbot.sh
地域 us-south
 に切り替えました
ターゲットの Cloud Foundry (https://api.us-south.cf.cloud.ibm.com)

ターゲットの組織 {IBM ID}

ターゲットのスペース dev



API エンドポイント:      https://cloud.ibm.com
地域:                    us-south
ユーザー:                {IBM ID}
アカウント:              BMXUG IOT-HANDSON's Account (daf2e733339944d3a329d217a518fd74)
リソース・グループ:      Default
CF API エンドポイント:   https://api.us-south.cf.cloud.ibm.com (API バージョン: 2.151.0)
組織:                    {IBM ID}
スペース:                dev
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account の すべての場所 で リソース・グループ Default 内の タイプ service_instance のインスタンスを取得しています...
OK
名前                                      場所       状態     タイプ
virtual-tjbot-starter-20200815111925304   jp-tok     active   service_instance
Continuous Delivery                       jp-tok     active   service_instance
TJBot_LanguageTranslator                  jp-tok     active   service_instance
TJBot_SpeechToText                        jp-tok     active   service_instance
Cloudant-aw                               us-south   active   service_instance
TJBot_TextToSpeech                        jp-tok     active   service_instance
TJBot_VisualRecognition                   us-south   active   service_instance
TJBot_Assistant                           jp-tok     active   service_instance
-----------------------------------------------------------------------------------------------
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス virtual-tjbot-starter-20200815111925304 を削除しています...
OK
ID crn:v1:bluemix:public:toolchain:jp-tok:a/daf2e733339944d3a329d217a518fd74:71dc496a-80db-4d31-a91f-29bbc7f01196:: のサービス・インスタンス virtual-tjbot-starter-20200815111925304 は正常に削 除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス Continuous Delivery を削除しています...
OK
ID crn:v1:bluemix:public:continuous-delivery:jp-tok:a/daf2e733339944d3a329d217a518fd74:5ac78c35-a4bc-4f72-9a06-c1c63e2fe015:: のサービス・インスタンス Continuous Delivery は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス TJBot_LanguageTranslator を削除しています...
OK
ID crn:v1:bluemix:public:language-translator:jp-tok:a/daf2e733339944d3a329d217a518fd74:aaaac9f4-06c9-4f74-979c-0dffd9bd0b7c:: のサービス・インスタンス TJBot_LanguageTranslator は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス TJBot_SpeechToText を削除しています...
OK
ID crn:v1:bluemix:public:speech-to-text:jp-tok:a/daf2e733339944d3a329d217a518fd74:784f472f-1a7c-4842-ac47-fef71e7ab02d:: のサービス・インスタンス TJBot_SpeechToText は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス Cloudant-aw を削除しています...
OK
ID crn:v1:bluemix:public:cloudantnosqldb:us-south:a/daf2e733339944d3a329d217a518fd74:bf350153-6f2c-47b0-a181-c6e1a5b9955d:: のサービス・インスタンス Cloudant-aw は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス TJBot_TextToSpeech を削除しています...
OK
ID crn:v1:bluemix:public:text-to-speech:jp-tok:a/daf2e733339944d3a329d217a518fd74:781e1da4-53d2-4c3e-b5a7-e14d57d06723:: のサービス・インスタンス TJBot_TextToSpeech は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス TJBot_VisualRecognition を削除しています...
OK
ID crn:v1:bluemix:public:watson-vision-combined:us-south:a/daf2e733339944d3a329d217a518fd74:283decae-aa08-4701-a8a9-237733242b51:: のサービス・インスタンス TJBot_VisualRecognition は正常に削除されます
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account のリソース・グループ Default のサービス・インスタンス TJBot_Assistant を削除しています...
OK
ID crn:v1:bluemix:public:conversation:jp-tok:a/daf2e733339944d3a329d217a518fd74:15578fb1-3444-4bcd-b503-3ac2eccff1a6:: のサービス・インスタンス TJBot_Assistant は正常に削除されます
-----------------------------------------------------------------------------------------------
{IBM ID} としてアカウント BMXUG IOT-HANDSON's Account の すべての場所 で リソース・グループ Default 内の タイプ service_instance のインスタンスを取得しています...
OK
サービス・インスタンスが見つかりません。
-----------------------------------------------------------------------------------------------
'cf a' を起動しています...

{IBM ID} として組織 {IBM ID} / スペース dev 内のアプリを取得しています...
OK

名前                                      要求された状態   インスタンス   メモリー   ディスク   URL
virtual-tjbot-starter-20200815111925304   started          1/1            256M       1G         virtual-tjbot-starter-20200815111925304.mybluemix.net
'cf delete virtual-tjbot-starter-20200815111925304 -f' を起動しています...

{IBM ID} として組織 {IBM ID} / スペース dev 内のアプリ virtual-tjbot-starter-20200815111925304 を削除しています...
OK
-----------------------------------------------------------------------------------------------
'cf a' を起動しています...

{IBM ID} として組織 {IBM ID} / スペース dev 内のアプリを取得しています...
OK

アプリが見つかりませんでした
-----------------------------------------------------------------------------------------------
{IBM ID} として 現行アカウント にバインドされるすべてのサービス ID を取得しています...
OK
ID                                               名前   作成日時                最終更新                説明   ロック中
ServiceId-e66846db-68d0-4eab-b0fd-28492155f262   TJB    2020-08-14T00:55+0000   2020-08-14T01:01+0000          false
-----------------------------------------------------------------------------------------------
{IBM ID} として 現行アカウント にバインドされるすべてのサービス ID を取得しています...
OK
ID                                               名前   作成日時                最終更新                説明   ロック中
ServiceId-e66846db-68d0-4eab-b0fd-28492155f262   TJB    2020-08-14T00:55+0000   2020-08-14T01:01+0000          false
-----------------------------------------------------------------------------------------------
{IBM ID} としてアカウント daf2e733339944d3a329d217a518fd74 のすべての API キーを取得しています...
OK
名前                                                  説明   作成日時                最終更新                ロック中   ID
virtual-tjbot-starter-20200815111925304 の API キー          2020-08-15T11:20+0000   2020-08-15T11:20+0000   false      ApiKey-e0102d58-2cae-4286-860c-5747ff054bc4
{IBM ID} としてアカウント daf2e733339944d3a329d217a518fd74 の API キー virtual-tjbot-starter-20200815111925304 の API キー を削除しています...
OK
API キー virtual-tjbot-starter-20200815111925304 の API キー が削除されました
-----------------------------------------------------------------------------------------------
{IBM ID} としてアカウント daf2e733339944d3a329d217a518fd74 のすべての API キーを取得しています...
OK
名前   説明   作成日時   最終更新   ロック中   ID
-----------------------------------------------------------------------------------------------
```

## 実行後のサンプル
キレイに消えたでしょ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126158/e2191885-8bd2-328d-16db-0d295a5a68ef.png)

# ToDo
IBM cloud DevOpsで使われるContinues Delivery機能を使ってデプロイしています。
Githubレポジトリはお手持ちのIBM IDに紐付いてibmcloud上のgitlabにクローンされています。
こちらをキレイにしないと連続してデプロイしていくたびにクローンしたレポジトリが増え続けるので、
今後の課題です。