###################################################################### # All Rights Reserved, Copyright FUJITSU LIMITED 2015-2018 # # API実行サンプル名: # 05-019_仮想サーバにポートをアタッチ/デタッチ # # 内容: # 仮想サーバにポートをアタッチ(追加)、仮想サーバからポートを # デタッチ(削除)する手順です。 # # 版数:v1.0 # 更新日:2018/1/26 ###################################################################### 手順: ─────────────────────────────────── 項番1.リソース確認 項番1-1.仮想サーバ確認 項番1-2.ポート確認 項番2.仮想サーバにポートをアタッチ 項番2-1.仮想サーバにポートをアタッチ 項番2-2.仮想サーバインターフェース確認 項番3.仮想サーバからポートをデタッチ 項番3-1.仮想サーバからポートをデタッチ 項番3-2.仮想サーバインターフェース確認 参考1.LinuxOS上のインターフェース追加設定 参考1-1.仮想サーバインターフェース確認 参考1-2.インターフェースファイル確認 参考1-3.インターフェースファイルコピー 参考1-4.インターフェースファイル編集 参考1-5.仮想サーバネットワーク再起動 参考1-6.仮想サーバインターフェース確認 ─────────────────────────────────── 事前準備: あらかじめ以下を準備する必要があります。 ─────────────────────────────────── ・ルータ1 ・ネットワーク1 ・サブネット1 ・ポート1 ・仮想サーバ1 ・ネットワーク2 ・サブネット2 ・ポート2 ・セキュリティグループ ─────────────────────────────────── 仮想サーバにポート追加設定構成例: 以下のような構成の仮想サーバにポートをアタッチ(追加)する 構成例を示します。 ====================================================================== 【外部ネットワーク】 ━┳━━━━━━ ┃ 【ルータ1】 ┃ 【ネットワーク1】 ┃ 【サブネット1】 ┗━━━┳━━━(192.168.100.0/24) ━━━━━━ ┃ ┃ 【ポート1】 (192.168.100.11) 【仮想サーバ1】 【ポート2】 (192.168.110.22) ┃ ┃ 【ネットワーク2】 ┃ 【サブネット2】 ━━━━┻━━━(192.168.110.0/24) ━━━━━━ ====================================================================== 注意事項: ・LinuxOSの仮想サーバにポートをアタッチする場合、仮想サーバに ログイン後にOS上でインターフェース設定を行う必要があります。 WindowsOSの仮想サーバの場合は自動認識されるため、設定は不要です。 ・本サンプルではCentOS 6.8の仮想サーバを利用した設定例を記載して います。 ・ポートの作成手順についてはAPI実行サンプル「ポート作成」を参照して ください。 項番1.リソース確認 事前に作成した仮想サーバ、ポート2の状態を確認します。 項番1-1.仮想サーバ確認 事前に作成した仮想サーバの以下のパラメータを確認し、ポート1のみが 仮想サーバに関連付けられていること、仮想サーバが停止していることを 確認してください。 ・"addresses": {"<ネットワーク1名>": [{"addr": "<ポート1のIPアドレス>"}]} ・"status": "SHUTOFF" 環境定義コマンド例: ====================================================================== # SERVER_ID=<ポートをアタッチする仮想サーバID> SERVER_ID=ba3c09c5-c32b-4358-9404-fa9b5b794n72 API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "server": { "metadata": {}, "config_drive": "", "OS-EXT-STS:power_state": 1, "progress": 0, "accessIPv6": "", "accessIPv4": "", "os-extended-volumes:volumes_attached": [ { "id": "96c642e0-cdfa-4d70-8930-ed23b5e0e381" } ], "OS-DCF:diskConfig": "MANUAL", "tenant_id": "<プロジェクトID>", "created": "2018-01-04T10:15:21Z", "name": "TEST_SERVER_01", "user_id": "<ユーザID>", "OS-EXT-AZ:availability_zone": "jp-west-2a", "OS-SRV-USG:terminated_at": null, "image": "", "key_name": "TEST_KEY_01", "links": [ { "rel": "self", "href": "http://10.27.0.201/v2/<プロジェクトID>/servers/ba3c09c5-c32b-4358-9404-fa9b5b794n72" }, { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/servers/ba3c09c5-c32b-4358-9404-fa9b5b794n72" } ], "addresses": { "TEST_NETWORK_01": [ { "OS-EXT-IPS:type": "fixed", "addr": "192.168.100.11", "version": 4, "OS-EXT-IPS-MAC:mac_addr": "FC:19:1E:91:8B:5W" } ] }, "OS-EXT-SRV-ATTR:host": "jp3a01-pgy137-00", "hostId": "e593f332f10686a6e1e81f3779ba0c64d032d7faa036e265eaed3c5e", "updated": "2018-01-04T10:16:22Z", "status": "SHUTOFF", "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "stopped", "OS-EXT-SRV-ATTR:instance_name": "instance-0001eb9a", "OS-SRV-USG:launched_at": "2018-01-04T10:16:22.000000", "OS-EXT-SRV-ATTR:hypervisor_hostname": "jp3a01-pgy137-00", "flavor": { "links": [ { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/flavors/1101" } ], "id": "1101" }, "id": "ba3c09c5-c32b-4358-9404-fa9b5b794n72", "security_groups": [ { "name": "TEST_SG_001" } ] } } ====================================================================== 項番1-2.ポート確認 事前に作成したアタッチするポート2の以下パラメータを確認し、 ポートが使用されていないことを確認します。 ・"status": "DOWN" ・"device_id": "" ・"device_owner": "" 環境定義コマンド例: ====================================================================== # PORT_ID=<仮想サーバにアタッチするポート2ID> PORT_ID=2a86ad89-cd74-4c82-9ca8-174546d896de 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": [ "832ce03a-73f2-455a-a01e-dff8ecb4weds" ], "id": "2a86ad89-cd74-4c82-9ca8-174546d896de", "fixed_ips": [ { "ip_address": "192.168.110.22", "subnet_id": "10f29bec-92ed-4e9e-bb41-ced366bbm758" } ], "mac_address": "FC:13:1E:58:62:N1", "device_owner": "", "status": "DOWN", "name": "TEST_PORT_110_22", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "d26edf0b-8394-499b-8a47-4280148782k4", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 項番2.仮想サーバにポートをアタッチ 仮想サーバにポートをアタッチし、アタッチされたことを確認します。 注意事項: ・LinuxOSの仮想サーバにポートをアタッチする場合、仮想サーバに ログイン後にOS上でインターフェース設定を行う必要があります。 WindowsOSの仮想サーバの場合は自動認識されるため、設定は不要です。 ・本サンプルではCentOS 6.8の仮想サーバを利用した設定例を記載して います。 ・ポートのアタッチ後に仮想サーバを起動させてログインしてください。 仮想サーバの起動方法はAPI実行サンプル「仮想サーバの起動と停止」 を参照してください。 項番2-1.仮想サーバにポートをアタッチ 仮想サーバにポートをアタッチします。 環境定義コマンド例: ====================================================================== # SERVER_ID=<ポートをアタッチする仮想サーバID> SERVER_ID=ba3c09c5-c32b-4358-9404-fa9b5b794n72 # PORT_ID=<仮想サーバにアタッチするポート2ID> PORT_ID=2a86ad89-cd74-4c82-9ca8-174546d896de API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID/os-interface -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "interfaceAttachment": {"port_id": "'$PORT_ID'" }}' | jq . レスポンス例: ====================================================================== { "interfaceAttachment": { "mac_addr": "FC:13:1E:58:62:N1", "net_id": "d26edf0b-8394-499b-8a47-4280148782k4", "port_id": "2a86ad89-cd74-4c82-9ca8-174546d896de", "fixed_ips": [ { "ip_address": "192.168.110.22", "subnet_id": "10f29bec-92ed-4e9e-bb41-ced366bbm758" } ], "port_state": "DOWN" } } ====================================================================== 項番2-2.仮想サーバインターフェース確認 仮想サーバのインターフェースを確認し、ポートがアタッチされたことを 確認します。 環境定義コマンド例: ====================================================================== # SERVER_ID=<ポート2をアタッチした仮想サーバID> SERVER_ID=ba3c09c5-c32b-4358-9404-fa9b5b794n72 API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID/os-interface -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "interfaceAttachments": [ { "mac_addr": "FC:13:1E:58:62:N1", "net_id": "d26edf0b-8394-499b-8a47-4280148782k4", "port_id": "2a86ad89-cd74-4c82-9ca8-174546d896de", "fixed_ips": [ { "ip_address": "192.168.110.22", "subnet_id": "10f29bec-92ed-4e9e-bb41-ced366bbm758" } ], "port_state": "ACTIVE" }, { "mac_addr": "FC:19:1E:91:8B:5W", "net_id": "382478d6-3359-4e8d-ace8-9bca0b54231b", "port_id": "f7926ba1-cb33-4f4c-8c23-2a080660f896", "fixed_ips": [ { "ip_address": "192.168.100.11", "subnet_id": "92ce9b10-88bb-4793-aced-c3a8bddc028b" } ], "port_state": "ACTIVE" } ] } ====================================================================== 項番3.仮想サーバからポートをデタッチ 仮想サーバからポートをデタッチし、デタッチされたことを確認します。 注意事項: ・LinuxOSの仮想サーバにポートをアタッチした際に、仮想サーバに ログインし、OS上に作成したインターフェースファイルを削除し、 OS上でネットワークの再起動を行う必要があります。 WindowsOSの仮想サーバの場合は自動認識されるため、設定は不要です。 項番3-1.仮想サーバからポートをデタッチ 仮想サーバからポートをデタッチします。デタッチしたポートは 削除されます。 環境定義コマンド例: ====================================================================== # TMP_SERVER_ID=<ポートをデタッチする仮想サーバID> TMP_SERVER_ID=ba3c09c5-c32b-4358-9404-fa9b5b794n72 # TMP_PORT_ID=<デタッチするポート2ID> TMP_PORT_ID=2a86ad89-cd74-4c82-9ca8-174546d896de API実行コマンド例: ====================================================================== curl -Ssi $COMPUTE/v2/$PROJECT_ID/servers/$TMP_SERVER_ID/os-interface/$TMP_PORT_ID -X DELETE -H "X-Auth-Token: $OS_AUTH_TOKEN" レスポンス例: ====================================================================== HTTP/1.1 202 Accepted X-Fcx-Endpoint-Request: EXECUTED_REQ016448900_202 Date: Thu, 04 Jan 2018 11:46:59 GMT Server: Apache x-compute-request-id: req-bd7fc368-6cfb-4a7d-b1ad-a0404fbcf6ae Cache-Control: no-cache X-Request-Id: 6f29e2df-5807-4588-8f98-7e6905417add X-Runtime: 1.075000 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html;charset=UTF-8 Content-Length: 0 ====================================================================== 項番3-2.仮想サーバインターフェース確認 仮想サーバのインターフェースを確認し、ポートがデタッチされたことを 確認します。 環境定義コマンド例: ====================================================================== # SERVER_ID=<ポートをデタッチした仮想サーバID> SERVER_ID=ba3c09c5-c32b-4358-9404-fa9b5b794n72 API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID/os-interface -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "interfaceAttachments": [ { "mac_addr": "FC:19:1E:91:8B:5W", "net_id": "382478d6-3359-4e8d-ace8-9bca0b54231b", "port_id": "f7926ba1-cb33-4f4c-8c23-2a080660f896", "fixed_ips": [ { "ip_address": "192.168.100.11", "subnet_id": "92ce9b10-88bb-4793-aced-c3a8bddc028b" } ], "port_state": "ACTIVE" } ] } ====================================================================== 参考1.LinuxOS上のインターフェース追加設定 LinuxOSの仮想サーバにポートをアタッチする場合、仮想サーバにログイン 後にOS上でインターフェース設定を行う必要があります。 本サンプルではCentOS 6.8の仮想サーバを利用した設定の一例を記載して います。ご利用環境、構成により設定を変更してご利用ください。 注意事項: ・インターフェース設定はroot権限ユーザで実施してください。 本サンプルでは"root"ユーザにて実施しています。 参考1-1.仮想サーバインターフェース確認 仮想サーバにポートをアタッチした後に、仮想サーバにログインし、 OS上で仮想サーバのインターフェースを確認します。 インターフェースファイル設定前では「eth1」(アタッチしたポート)の 情報が取得できていない状態であることを確認します。 実行コマンド例: ====================================================================== # <仮想サーバのインタフェースを確認> ifconfig -a レスポンス例: ====================================================================== eth0 Link encap:Ethernet HWaddr FC:19:1E:91:8B:5W inet addr:192.168.100.11 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe82::f834:3eff:fe17:8a2e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:267 errors:0 dropped:0 overruns:0 frame:0 TX packets:301 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:34660 (33.8 KiB) TX bytes:36309 (35.4 KiB) eth1 Link encap:Ethernet HWaddr FC:13:1E:58:62:N1 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) ====================================================================== 参考1-2.インターフェースファイル確認 仮想サーバのインターフェースファイルの内容を確認します。 実行コマンド例: ====================================================================== # <"/etc/sysconfig/network-scripts/ifcfg-eth0"ファイルの内容確認> # cat <インターフェースファイル名> cat /etc/sysconfig/network-scripts/ifcfg-eth0 レスポンス例: ====================================================================== DEVICE="eth0" BOOTPROTO="dhcp" IPV6INIT="yes" MTU="1500" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="733285fa-1efe-4d9c-a70b-668922162n45" ====================================================================== 参考1-3.インターフェースファイルコピー "ifcfg-eth0"ファイルをコピーし、"ifcfg-eth1"ファイルを作成します。 ファイルが作成されたことを確認します。 実行コマンド例: ====================================================================== # <"ifcfg-eth0"ファイルをコピーして"ifcfg-eth1"ファイルを作成> # cp <コピー元ファイル名> <コピー後のファイル名> cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1 # <"ifcfg-eth1"ファイルの確認> # ls -al <作成したファイル名> ls -al /etc/sysconfig/network-scripts/ifcfg-eth1 レスポンス例: ====================================================================== [root@test-server-01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1 [root@test-server-01 ~]# <レスポンスなし> [root@test-server-01 ~]# [root@test-server-01 ~]# ls -al /etc/sysconfig/network-scripts/ifcfg-eth1 -rw-r--r--. 1 root root 150 Jan 4 11:30 /etc/sysconfig/network-scripts/ifcfg-eth1 ====================================================================== 参考1-4.インターフェースファイル編集 作成した"ifcfg-eth1"ファイルの内容を編集します。 "# <説明文>"が直前に付与されている項目が編集した項目となります。 編集前の項目は「項番1-2」のレスポンス例を参照してください。 実行コマンド例: ====================================================================== # <作成したインターフェースファイルの内容を編集> # vi <作成したファイル名> vi /etc/sysconfig/network-scripts/ifcfg-eth1 編集内容例: ====================================================================== # DEVICE="<ネットワークインターフェース名>" DEVICE="eth1" BOOTPROTO="dhcp" IPV6INIT="yes" MTU="1500" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" # "eth0のUUIDのため削除または"#"(コメントアウト) # UUID="733285fa-1efe-4d9c-a70b-668922162n45" # IPADDR=<アタッチしたポート2のIPアドレス *追記項目> IPADDR=192.168.110.22 # NETMASK=<ネットマスク *追記項目> NETMASK=255.255.255.0 # NETWORK=<アタッチしたポート2が所属するネットワーク *追記項目> NETWORK=192.168.110.0 # BROADCAST=<アタッチしたポート2のブロードキャストアドレス *追記項目> BROADCAST=192.168.110.255 # HWADDR=<アタッチしたポート2のMACアドレス(「参考1-1」 # レスポンス例を参照) *追記項目> HWADDR=FC:13:1E:58:62:N1 # DEFROUTE=<デフォルトルート("yes","no"を指定) *追記項目> DEFROUTE=no ====================================================================== レスポンス例: ====================================================================== DEVICE="eth1" BOOTPROTO="dhcp" IPV6INIT="yes" MTU="1500" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" IPADDR=192.168.110.22 NETMASK=255.255.255.0 NETWORK=192.168.110.0 BROADCAST=192.168.110.255 HWADDR=FC:13:1E:58:62:N1 DEFROUTE=no ====================================================================== 参考1-5.仮想サーバネットワーク再起動 仮想サーバのネットワークを再起動します。 実行コマンド例: ====================================================================== # <ネットワーク再起動> /etc/init.d/network restart レスポンス例: ====================================================================== Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Bringing up interface eth1: Determining IP information for eth1... done. [ OK ] ====================================================================== 参考1-6.仮想サーバインターフェース確認 仮想サーバのインターフェースを確認し、設定した項目が反映されている ことを確認します。 実行コマンド例: ====================================================================== # <仮想サーバのインタフェースを確認> ifconfig -a レスポンス例: ====================================================================== [root@test-server-01 ~]# ifconfig -a eth0 Link encap:Ethernet HWaddr FC:19:1E:91:8B:5W inet addr:192.168.100.11 Bcast:192.168.100.255 Mask:255.255.255.0 inet6 addr: fe82::f834:3eff:fe17:8a2e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:750 errors:0 dropped:0 overruns:0 frame:0 TX packets:669 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:77647 (75.8 KiB) TX bytes:90667 (88.5 KiB) eth1 Link encap:Ethernet HWaddr FC:13:1E:58:62:N1 inet addr:192.168.110.22 Bcast:192.168.110.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fe59:65a1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3487 (3.4 KiB) TX bytes:1208 (1.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) ====================================================================== 以上