2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【小ネタ】 OKE のクイック作成で作成される VCN の関連リソースを一括削除する

Posted at

はじめに

OKE(Oracle Container Engine for Kubernetes) のクイック作成に限らず、現在 VCN は関連リソースまで含めたカスケード削除ができないので、検証後のゴミ掃除がちょっと面倒なわけです。それを解決するべく、Python でスクリプトを書いてみました。
※実行すると、問答無用で関連リソースが削除されるので、ご使用は各自の判断にお任せします...

ソースコード: https://github.com/shukawam/oci-scripts/blob/main/script/delete-oke-quickstart-vcn.py

スクリプトと実行方法

delete-oke-quickstart-vcn.py
import argparse
import sys

import oci
from oci.core import VirtualNetworkClient
from oci.core.models import UpdateRouteTableDetails
from oci.core.models import UpdateSecurityListDetails


class CustomHelpFormatter(argparse.HelpFormatter):
    def __init__(self, prog, indent_increment=2, max_help_position=50, width=None):
        super().__init__(prog, indent_increment, max_help_position, width)


def parseInput():
    parser = argparse.ArgumentParser(
        description="OKE quick-start VCN automatically deleting script.", formatter_class=CustomHelpFormatter)
    parser.add_argument('--compartment-id', type=str, help="[required]")
    parser.add_argument('--vcn-id', type=str, help="[required]")
    parser.add_argument('--profile', type=str,
                        default="DEFAULT", help="[optional]")
    if len(sys.argv) < 2:
        parser.print_help()
        sys.exit(1)
    else:
        return parser.parse_args()


def delete_route_tables_rules(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE ROUTE TABLE RULES. ***")
    route_tables = vcn_client.list_route_tables(
        compartment_id=compartment_id).data
    quick_start_route_tables = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid, route_tables))
    for route_table in quick_start_route_tables:
        vcn_client.update_route_table(
            rt_id=route_table.id,
            update_route_table_details=UpdateRouteTableDetails(
                route_rules=[]
            )
        )
    print("*** END: DELETE ROUTE TABLE RULES. ***")


def delete_gateway_resouces(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE GATEWAY RESOURCES. ***")
    nat_gateway_id = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid,
               vcn_client.list_nat_gateways(compartment_id=compartment_id).data)
    )[0].id
    print("*** DELETING NAT GATEWAY... ***")
    vcn_client.delete_nat_gateway(nat_gateway_id=nat_gateway_id)
    svc_gateway_id = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid,
               vcn_client.list_service_gateways(compartment_id=compartment_id).data)
    )[0].id
    print("*** DELETING SERVICE GATEWAY... ***")
    vcn_client.delete_service_gateway(service_gateway_id=svc_gateway_id)
    internet_gateway_id = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid,
               vcn_client.list_internet_gateways(compartment_id=compartment_id).data)
    )[0].id
    print("*** DELETING INTERNET GATEWAY... ***")
    vcn_client.delete_internet_gateway(ig_id=internet_gateway_id)
    print("*** END: DELETE GATEWAY RESOURCES. ***")


def delete_security_list_rules(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE SECURITY LIST RULES. ***")
    security_lists = vcn_client.list_security_lists(
        compartment_id=compartment_id).data
    quick_start_security_lists = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid, security_lists))
    for security_list in quick_start_security_lists:
        vcn_client.update_security_list(
            security_list_id=security_list.id,
            update_security_list_details=UpdateSecurityListDetails(
                egress_security_rules=[],
                ingress_security_rules=[]
            )
        )
    print("*** END: DELETE SECURITY LIST RULES. ***")


def delete_subnets(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE SUBNET. ***")
    subnet_lists = vcn_client.list_subnets(compartment_id=compartment_id).data
    quick_start_subnet_list = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid, subnet_lists))
    for subnet_list in quick_start_subnet_list:
        vcn_client.delete_subnet(subnet_id=subnet_list.id)
    print("*** END: SECURITY SUBNET. ***")


def delete_security_list(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE SECURITY LIST. ***")
    security_lists = vcn_client.list_security_lists(
        compartment_id=compartment_id).data
    quick_start_vcn_ocid.startswith
    quick_start_security_list = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid and d.display_name.startswith('oke-svclbseclist') == False, security_lists))
    for security_list in quick_start_security_list:
        vcn_client.delete_security_list(security_list_id=security_list.id)
    print("*** END: DELETE SECURITY LIST. ***")


def delete_route_table(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient, compartment_id: str):
    print("*** START: DELETE ROUTE TABLE. ***")
    route_table_lists = vcn_client.list_route_tables(
        compartment_id=compartment_id).data
    quick_start_route_table = list(
        filter(lambda d: d.vcn_id == quick_start_vcn_ocid and d.display_name.startswith('oke-public-routetable') == False, route_table_lists))
    for route_table in quick_start_route_table:
        vcn_client.delete_route_table(rt_id=route_table.id)
    print("*** END: DELETE ROUTE TABLE. ***")


def delete_vcn(quick_start_vcn_ocid: str, vcn_client: VirtualNetworkClient):
    print("*** START: DELETE VCN. ***")
    vcn_client.delete_vcn(vcn_id=quick_start_vcn_ocid)
    print("*** END: DELETE VCN. ***")


def main():
    args = parseInput()
    config = oci.config.from_file("~/.oci/config", args.profile)
    compartment_id = args.compartment_id
    quick_start_vcn_ocid = args.vcn_id
    vcn_client = VirtualNetworkClient(config)
    delete_route_tables_rules(
        quick_start_vcn_ocid=quick_start_vcn_ocid, vcn_client=vcn_client, compartment_id=compartment_id)
    delete_gateway_resouces(
        quick_start_vcn_ocid=quick_start_vcn_ocid, vcn_client=vcn_client, compartment_id=compartment_id)
    delete_security_list_rules(
        quick_start_vcn_ocid=quick_start_vcn_ocid, vcn_client=vcn_client, compartment_id=compartment_id)
    delete_subnets(
        quick_start_vcn_ocid=quick_start_vcn_ocid, vcn_client=vcn_client, compartment_id=compartment_id)
    delete_security_list(
        quick_start_vcn_ocid=quick_start_vcn_ocid, vcn_client=vcn_client, compartment_id=compartment_id)

    delete_route_table(quick_start_vcn_ocid=quick_start_vcn_ocid,
                       vcn_client=vcn_client, compartment_id=compartment_id)
    delete_vcn(quick_start_vcn_ocid=quick_start_vcn_ocid,
               vcn_client=vcn_client)


if __name__ == "__main__":
    main()

実行する時は、こんな形で実行できます。

python3 delete-oke-quickstart-vcn.py \
  --compartment-id <compartment-id> \
  --vcn-id <vcn-id>

--help オプションをつけて実行すれば、何となく使い方が分かると思います。

python3 delete-oke-quickstart-vcn.py --help
usage: delete-oke-quickstart-vcn.py [-h] [--compartment-id COMPARTMENT_ID] [--vcn-id VCN_ID] [--profile PROFILE]

OKE quick-start VCN automatically deleting script.

options:
  -h, --help                       show this help message and exit
  --compartment-id COMPARTMENT_ID  [required]
  --vcn-id VCN_ID                  [required]
  --profile PROFILE                [optional]

終わりに

動かない、等ありましたら本記事のコメントもしくは、Issue を上げてもらえば対応します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?