#!/usr/bin/env perl use strict; use warnings; use OpenStack::MetaAPI (); use Test2::Bundle::Extended; use Test2::Tools::Explain; use Test2::Plugin::NoWarnings; use FindBin; use lib "$FindBin::Bin/lib"; use Test::OpenStack::MetaAPI qw{:all}; use Test::OpenStack::MetaAPI::Auth qw{:all}; use JSON; mock_lwp_useragent(); $Test::OpenStack::MetaAPI::UA_DISPLAY_OUTPUT = 1; my $api = get_api_object(use_env => 0); ok $api, "got one api object" or die; { note "Testing Network service"; mock_get_request( 'http://127.0.0.1:9696/v2.0/floatingips', application_json(json_for_floatingips()), ); my $IMAGE_UID = '170fafa5-1329-44a3-9c27-9bb77b77206d'; my $IMAGE_NAME = 'myimage'; like [$api->floatingips()], [ { 'created_at' => '2016-12-21T10:55:50Z', 'description' => 'for test', 'dns_domain' => 'my-domain.org.', 'dns_name' => 'myfip', 'fixed_ip_address' => '10.0.0.3', 'floating_ip_address' => '172.24.4.228', 'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57', 'id' => '2f245a7b-796b-4f26-9cf9-9e82d248fda7', 'port_details' => { 'admin_state_up' => bless(do { \(my $o = 1) }, 'JSON::PP::Boolean'), 'device_id' => '8e3941b4-a6e9-499f-a1ac-2a4662025cba', 'device_owner' => 'compute:nova', 'mac_address' => 'fa:16:3e:b1:3b:30', 'name' => '', 'network_id' => '02dd8479-ef26-4398-a102-d19d0a7b3a1f', 'status' => 'ACTIVE' }, 'port_forwardings' => [], 'port_id' => 'ce705c24-c1ef-408a-bda3-7bbd946164ab', 'project_id' => '4969c491a3c74ee4af974e6d800c62de', 'revision_number' => 1, 'router_id' => 'd23abc8d-2991-4a55-ba98-2aaea84cc72f', 'status' => 'ACTIVE', 'tags' => ['tag1,tag2'], 'tenant_id' => '4969c491a3c74ee4af974e6d800c62de', 'updated_at' => '2016-12-21T10:55:53Z' }, { 'created_at' => '2016-12-21T11:55:50Z', 'description' => 'for test', 'dns_domain' => 'my-domain.org.', 'dns_name' => 'myfip2', 'fixed_ip_address' => undef, 'floating_ip_address' => '172.24.4.227', 'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57', 'id' => '61cea855-49cb-4846-997d-801b70c71bdd', 'port_details' => undef, 'port_forwardings' => [], 'port_id' => undef, 'project_id' => '4969c491a3c74ee4af974e6d800c62de', 'revision_number' => 2, 'router_id' => undef, 'status' => 'DOWN', 'tags' => ['tag1,tag2'], 'tenant_id' => '4969c491a3c74ee4af974e6d800c62de', 'updated_at' => '2016-12-21T11:55:53Z' }, { 'created_at' => '2018-06-15T02:12:48Z', 'description' => 'for test with port forwarding', 'dns_domain' => 'my-domain.org.', 'dns_name' => 'myfip3', 'fixed_ip_address' => undef, 'floating_ip_address' => '172.24.4.42', 'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57', 'id' => '898b198e-49f7-47d6-a7e1-53f626a548e6', 'port_forwardings' => [ { 'external_port' => 2225, 'internal_ip_address' => '10.0.0.19', 'internal_port' => 25, 'protocol' => 'tcp' }, { 'external_port' => 8786, 'internal_ip_address' => '10.0.0.18', 'internal_port' => 16666, 'protocol' => 'tcp' } ], 'port_id' => undef, 'project_id' => '4969c491a3c74ee4af974e6d800c62de', 'revision_number' => 1, 'router_id' => '0303bf18-2c52-479c-bd68-e0ad712a1639', 'status' => 'ACTIVE', 'tags' => [], 'tenant_id' => '4969c491a3c74ee4af974e6d800c62de', 'updated_at' => '2018-06-15T02:12:57Z' }] , "floatingips"; # mock_get_request( 'http://127.0.0.1:9696/v2.0/security-groups', application_json(json_for_security_groups()), ); is $api->security_groups, { 'created_at' => '2018-03-19T19:16:56Z', 'description' => 'default', 'id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'name' => 'default', 'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'revision_number' => 8, 'security_group_rules' => [ { 'created_at' => '2018-03-19T19:16:56Z', 'description' => '', 'direction' => 'egress', 'ethertype' => 'IPv6', 'id' => '3c0e45ff-adaf-4124-b083-bf390e5482ff', 'port_range_max' => undef, 'port_range_min' => undef, 'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'protocol' => undef, 'remote_group_id' => undef, 'remote_ip_prefix' => undef, 'revision_number' => 1, 'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'tags' => ['tag1,tag2'], 'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'updated_at' => '2018-03-19T19:16:56Z' }, { 'created_at' => '2018-03-19T19:16:56Z', 'description' => '', 'direction' => 'egress', 'ethertype' => 'IPv4', 'id' => '93aa42e5-80db-4581-9391-3a608bd0e448', 'port_range_max' => undef, 'port_range_min' => undef, 'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'protocol' => undef, 'remote_group_id' => undef, 'remote_ip_prefix' => undef, 'revision_number' => 2, 'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'tags' => ['tag1,tag2'], 'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'updated_at' => '2018-03-19T19:16:56Z' }, { 'created_at' => '2018-03-19T19:16:56Z', 'description' => '', 'direction' => 'ingress', 'ethertype' => 'IPv6', 'id' => 'c0b09f00-1d49-4e64-a0a7-8a186d928138', 'port_range_max' => undef, 'port_range_min' => undef, 'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'protocol' => undef, 'remote_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'remote_ip_prefix' => undef, 'revision_number' => 1, 'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'tags' => ['tag1,tag2'], 'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'updated_at' => '2018-03-19T19:16:56Z' }, { 'created_at' => '2018-03-19T19:16:56Z', 'description' => '', 'direction' => 'ingress', 'ethertype' => 'IPv4', 'id' => 'f7d45c89-008e-4bab-88ad-d6811724c51c', 'port_range_max' => undef, 'port_range_min' => undef, 'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'protocol' => undef, 'remote_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'remote_ip_prefix' => undef, 'revision_number' => 1, 'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5', 'tags' => ['tag1,tag2'], 'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'updated_at' => '2018-03-19T19:16:56Z' } ], 'tags' => ['tag1,tag2'], 'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550', 'updated_at' => '2018-03-19T19:16:56Z' }, "security_groups"; } done_testing; sub json_for_floatingips { # https://developer.openstack.org/api-ref/compute/?expanded=show-server-details-detail return <<'JSON'; { "floatingips": [ { "router_id": "d23abc8d-2991-4a55-ba98-2aaea84cc72f", "description": "for test", "dns_domain": "my-domain.org.", "dns_name": "myfip", "created_at": "2016-12-21T10:55:50Z", "updated_at": "2016-12-21T10:55:53Z", "revision_number": 1, "project_id": "4969c491a3c74ee4af974e6d800c62de", "tenant_id": "4969c491a3c74ee4af974e6d800c62de", "floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57", "fixed_ip_address": "10.0.0.3", "floating_ip_address": "172.24.4.228", "port_id": "ce705c24-c1ef-408a-bda3-7bbd946164ab", "id": "2f245a7b-796b-4f26-9cf9-9e82d248fda7", "status": "ACTIVE", "port_details": { "status": "ACTIVE", "name": "", "admin_state_up": true, "network_id": "02dd8479-ef26-4398-a102-d19d0a7b3a1f", "device_owner": "compute:nova", "mac_address": "fa:16:3e:b1:3b:30", "device_id": "8e3941b4-a6e9-499f-a1ac-2a4662025cba" }, "tags": ["tag1,tag2"], "port_forwardings": [] }, { "router_id": null, "description": "for test", "dns_domain": "my-domain.org.", "dns_name": "myfip2", "created_at": "2016-12-21T11:55:50Z", "updated_at": "2016-12-21T11:55:53Z", "revision_number": 2, "project_id": "4969c491a3c74ee4af974e6d800c62de", "tenant_id": "4969c491a3c74ee4af974e6d800c62de", "floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57", "fixed_ip_address": null, "floating_ip_address": "172.24.4.227", "port_id": null, "id": "61cea855-49cb-4846-997d-801b70c71bdd", "status": "DOWN", "port_details": null, "tags": ["tag1,tag2"], "port_forwardings": [] }, { "router_id": "0303bf18-2c52-479c-bd68-e0ad712a1639", "description": "for test with port forwarding", "dns_domain": "my-domain.org.", "dns_name": "myfip3", "created_at": "2018-06-15T02:12:48Z", "updated_at": "2018-06-15T02:12:57Z", "revision_number": 1, "project_id": "4969c491a3c74ee4af974e6d800c62de", "tenant_id": "4969c491a3c74ee4af974e6d800c62de", "floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57", "fixed_ip_address": null, "floating_ip_address": "172.24.4.42", "port_id": null, "id": "898b198e-49f7-47d6-a7e1-53f626a548e6", "status": "ACTIVE", "tags": [], "port_forwardings": [ { "protocol": "tcp", "internal_ip_address": "10.0.0.19", "internal_port": 25, "external_port": 2225 }, { "protocol": "tcp", "internal_ip_address": "10.0.0.18", "internal_port": 16666, "external_port": 8786 } ] } ] } JSON } sub json_for_security_groups { return <<JSON; { "security_groups": [ { "description": "default", "id": "85cc3048-abc3-43cc-89b3-377341426ac5", "name": "default", "security_group_rules": [ { "direction": "egress", "ethertype": "IPv6", "id": "3c0e45ff-adaf-4124-b083-bf390e5482ff", "port_range_max": null, "port_range_min": null, "protocol": null, "remote_group_id": null, "remote_ip_prefix": null, "security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "project_id": "e4f50856753b4dc6afee5fa6b9b6c550", "revision_number": 1, "tags": ["tag1,tag2"], "tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550", "created_at": "2018-03-19T19:16:56Z", "updated_at": "2018-03-19T19:16:56Z", "description": "" }, { "direction": "egress", "ethertype": "IPv4", "id": "93aa42e5-80db-4581-9391-3a608bd0e448", "port_range_max": null, "port_range_min": null, "protocol": null, "remote_group_id": null, "remote_ip_prefix": null, "security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "project_id": "e4f50856753b4dc6afee5fa6b9b6c550", "revision_number": 2, "tags": ["tag1,tag2"], "tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550", "created_at": "2018-03-19T19:16:56Z", "updated_at": "2018-03-19T19:16:56Z", "description": "" }, { "direction": "ingress", "ethertype": "IPv6", "id": "c0b09f00-1d49-4e64-a0a7-8a186d928138", "port_range_max": null, "port_range_min": null, "protocol": null, "remote_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "remote_ip_prefix": null, "security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "project_id": "e4f50856753b4dc6afee5fa6b9b6c550", "revision_number": 1, "tags": ["tag1,tag2"], "tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550", "created_at": "2018-03-19T19:16:56Z", "updated_at": "2018-03-19T19:16:56Z", "description": "" }, { "direction": "ingress", "ethertype": "IPv4", "id": "f7d45c89-008e-4bab-88ad-d6811724c51c", "port_range_max": null, "port_range_min": null, "protocol": null, "remote_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "remote_ip_prefix": null, "security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5", "project_id": "e4f50856753b4dc6afee5fa6b9b6c550", "revision_number": 1, "tags": ["tag1,tag2"], "tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550", "created_at": "2018-03-19T19:16:56Z", "updated_at": "2018-03-19T19:16:56Z", "description": "" } ], "project_id": "e4f50856753b4dc6afee5fa6b9b6c550", "revision_number": 8, "created_at": "2018-03-19T19:16:56Z", "updated_at": "2018-03-19T19:16:56Z", "tags": ["tag1,tag2"], "tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550" } ] } JSON } __END__