###################################################################### # All Rights Reserved, Copyright FUJITSU LIMITED 2015-2018 # # API実行サンプル名: # 05-012_ルータにポートをアタッチ/デタッチ # # 内容: # 作成済みルータに作成済みポートをアタッチ/デタッチする手順です。 # # 版数:v1.0 # 更新日:2017/11/21 ###################################################################### 手順: ─────────────────────────────────── 項番1.ルータ確認 項番2.ポート確認 項番3.ルータにポートをアタッチ 項番3-1.ルータにポートをアタッチ 項番3-2.ルータとポートのアタッチ確認 項番4.ルータからポートをデタッチ 項番4-1.ルータからポートをデタッチ 項番4-2.ルータとポートのデタッチ確認 参考1.ルータにサブネットをアタッチ 参考1-1.ルータにサブネットをアタッチ 参考1-2.ルータとサブネットのアタッチ確認 参考2.ルータからサブネットをデタッチ 参考2-1.ルータからサブネットをデタッチ 参考2-2.ルータとサブネットのデタッチ確認 ─────────────────────────────────── 事前準備: あらかじめ以下を準備する必要があります。 ─────────────────────────────────── ・ルータ1 ・ポート1 ・ネットワーク1 ・サブネット1 ─────────────────────────────────── 注意事項: ・本サンプルではルータとポートをアタッチ/デタッチする手順を記載して います。参考にルータとサブネットのアタッチ/デタッチする手順を記載 しています。 ・デタッチする際、ルータとアタッチされていたポートは削除されます。 ※「項番4」「参考2」のAPI実行時に削除されます。 ・ポートの作成方法についてはAPI実行サンプル「ポート作成」を参照して ください。 項番1.ルータ確認 ポートをアタッチするルータの状態を確認します。 環境定義コマンド例: ====================================================================== # ROUTER_ID=<ポートをアタッチするルータID> ROUTER_ID=406b983e-3319-4045-9eb1-c0a300842974 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$ROUTER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "router": { "availability_zone": "jp-west-2a", "id": "406b983e-3319-4045-9eb1-c0a300842974", "routes": [], "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_ROUTER_01", "external_gateway_info": null, "status": "ACTIVE" } } ====================================================================== 項番2.ポート確認 ルータとアタッチするポートの状態を確認します。 環境定義コマンド例: ====================================================================== # PORT_ID=<ルータとアタッチするポートID> PORT_ID=329f567b-1134-469d-bbde-514589515493 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "port": { "availability_zone": "jp-west-2a", "device_id": "", "security_groups": [ "beb2e81d-a67f-4d18-9270-93324f227396" ], "id": "329f567b-1134-469d-bbde-514589515493", "fixed_ips": [ { "ip_address": "192.168.212.254", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ], "mac_address": "fa:16:3e:36:d1:60", "device_owner": "", "status": "DOWN", "name": "TEST_PORT_01", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "0e47de93-7142-4ff0-b7c3-5a1edfb183fs", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 項番3.ルータにポートをアタッチ ルータにポートをアタッチし、ポートがアタッチされたことを確認します。 項番3-1.ルータにポートをアタッチ ルータにポートをアタッチします。 環境定義コマンド例: ====================================================================== # ROUTER_ID=<ポートをアタッチするルータID> ROUTER_ID=406b983e-3319-4045-9eb1-c0a300842974 # PORT_ID=<ルータとアタッチするポートID> PORT_ID=329f567b-1134-469d-bbde-514589515493 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$ROUTER_ID/add_router_interface -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"port_id": "'$PORT_ID'" }' | jq . レスポンス例: ====================================================================== { "availability_zone": "jp-west-2a", "id": "406b983e-3319-4045-9eb1-c0a300842974", "port_id": "329f567b-1134-469d-bbde-514589515493", "tenant_id": "<プロジェクトID>", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ====================================================================== 項番3-2.ルータとポートのアタッチ確認 ルータとポートがアタッチされたことを以下のパラメータで確認します。 ・"device_id"にアタッチしたルータIDが記載されていること。 ・"device_owner": "network:router_interface"が記載されていること。 環境定義コマンド例: ====================================================================== # PORT_ID=<ルータとアタッチしたポートID> PORT_ID=329f567b-1134-469d-bbde-514589515493 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "port": { "availability_zone": "jp-west-2a", "device_id": "406b983e-3319-4045-9eb1-c0a300842974", "security_groups": [ "beb2e81d-a67f-4d18-9270-93324f227396" ], "id": "329f567b-1134-469d-bbde-514589515493", "fixed_ips": [ { "ip_address": "192.168.212.254", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ], "mac_address": "fa:16:3e:36:d1:60", "device_owner": "network:router_interface", "status": "ACTIVE", "name": "TEST_PORT_01", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "0e47de93-7142-4ff0-b7c3-5a1edfb183f", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 項番4.ルータからポートをデタッチ ルータからポートをデタッチし、ポートが削除されたことを確認します。 項番4-1.ルータからポートをデタッチ ルータからポートをデタッチします。 注意事項: ・デタッチのAPI実行時に、ルータとアタッチされていたポートは削除 されます。 環境定義コマンド例: ====================================================================== # TMP_ROUTER_ID=<ポートをデタッチするルータID> TMP_ROUTER_ID=406b983e-3319-4045-9eb1-c0a300842974 # TMP_PORT_ID=<ルータとデタッチするポートID> TMP_PORT_ID=329f567b-1134-469d-bbde-514589515493 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$TMP_ROUTER_ID/remove_router_interface -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"port_id": "'$TMP_PORT_ID'" }' | jq . レスポンス例: ====================================================================== { "availability_zone": "jp-west-2a", "id": "406b983e-3319-4045-9eb1-c0a300842974", "port_id": "329f567b-1134-469d-bbde-514589515493", "tenant_id": "<プロジェクトID>", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ====================================================================== 項番4-2.ルータとポートのデタッチ確認 ルータとアタッチされていたポートが削除されていることを確認します。 環境定義コマンド例: ====================================================================== # PORT_ID=<ルータとアタッチしたポートID> PORT_ID=329f567b-1134-469d-bbde-514589515493 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "NeutronError": { "detail": "", "type": "PortNotFound", "message": "Port 329f567b-1134-469d-bbde-514589515493 could not be found" } } ====================================================================== 参考1.ルータにサブネットをアタッチ ルータにサブネットをアタッチし、サブネットがアタッチされたことを 確認します。 参考1-1.ルータにサブネットをアタッチ ルータにサブネットをアタッチします。 注意事項: ルータにサブネットをアタッチする場合は、API実行時にポートが 自動生成されます。 環境定義コマンド例: ====================================================================== # ROUTER_ID=<サブネットをアタッチするルータID> ROUTER_ID=406b983e-3319-4045-9eb1-c0a300842974 # SUBNET_ID=<ルータにアタッチするサブネットID> SUBNET_ID=a6d8ecf7-385c-4ccd-8528-e2c0b4899632 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$ROUTER_ID/add_router_interface -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"subnet_id": "'$SUBNET_ID'" }' | jq . レスポンス例: ====================================================================== { "availability_zone": "jp-west-2a", "id": "406b983e-3319-4045-9eb1-c0a300842974", "port_id": "eaefec1c-2b30-4d35-adad-ba01610p5391", "tenant_id": "<プロジェクトID>", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ====================================================================== 参考1-2.ルータとサブネットのアタッチ確認 ルータとサブネットがアタッチされたことを以下のパラメータで確認します。 ・"device_id"にアタッチしたルータIDが記載されていること。 ・"device_owner": "network:router_interface"が記載されていること。 ※ポートIDは「参考1-1」のAPI実行後のレスポンス値を参照してください。 環境定義コマンド例: ====================================================================== # PORT_ID=<ルータとアタッチしたポートID> PORT_ID=eaefec1c-2b30-4d35-adad-ba01610p5391 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "port": { "availability_zone": "jp-west-2a", "device_id": "406b983e-3319-4045-9eb1-c0a300842974", "security_groups": [], "id": "eaefec1c-2b30-4d35-adad-ba01610p5391", "fixed_ips": [ { "ip_address": "192.168.212.1", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ], "mac_address": "fa:16:3e:46:c7:c0", "device_owner": "network:router_interface", "status": "ACTIVE", "name": "", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "0e47de93-7142-4ff0-b7c3-5a1edfb183f", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 参考2.ルータからサブネットをデタッチ ルータからサブネットをデタッチし、サブネットがデタッチされたことを 確認します。 参考2-1.ルータからサブネットをデタッチ ルータからサブネットをデタッチします。 注意事項: ・デタッチのAPI実行時に、ルータとアタッチされていたポート(自動生成) は削除されます。 環境定義コマンド例: ====================================================================== # TMP_ROUTER_ID=<サブネットをデタッチするルータID> TMP_ROUTER_ID=406b983e-3319-4045-9eb1-c0a300842974 # TMP_SUBNET_ID=<ルータからデタッチするサブネットID> TMP_SUBNET_ID=a6d8ecf7-385c-4ccd-8528-e2c0b4899632 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$TMP_ROUTER_ID/remove_router_interface -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"subnet_id": "'$TMP_SUBNET_ID'" }' | jq . レスポンス例: ====================================================================== { "availability_zone": "jp-west-2a", "id": "406b983e-3319-4045-9eb1-c0a300842974", "port_id": "eaefec1c-2b30-4d35-adad-ba01610p5391", "tenant_id": "<プロジェクトID>", "subnet_id": "a6d8ecf7-385c-4ccd-8528-e2c0b4899632" } ====================================================================== 参考2-2.ルータとサブネットのデタッチ確認 ルータとアタッチされていたポート(自動生成)が削除されていることを 確認します。 環境定義コマンド例: ====================================================================== # PORT_ID=<ルータとアタッチしたポートID> PORT_ID=eaefec1c-2b30-4d35-adad-ba01610p5391 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "NeutronError": { "detail": "", "type": "PortNotFound", "message": "Port eaefec1c-2b30-4d35-adad-ba01610p5391 could not be found" } } ====================================================================== 以上