blob: 97b12f9ee60cedd1e0e0858ea2e4263d80f68d7f [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Tests for Google Compute Engine Driver
"""
import datetime
import mock
import sys
import unittest
from libcloud.utils.py3 import httplib
from libcloud.compute.drivers.gce import (
GCENodeDriver,
API_VERSION,
timestamp_to_datetime,
GCEAddress,
GCEBackend,
GCEBackendService,
GCEFirewall,
GCEForwardingRule,
GCEHealthCheck,
GCENetwork,
GCENodeImage,
GCERoute,
GCERegion,
GCETargetHttpProxy,
GCEUrlMap,
GCEZone,
GCESubnetwork,
GCEProject,
)
from libcloud.common.google import (
GoogleBaseAuthConnection,
ResourceNotFoundError,
ResourceExistsError,
GoogleBaseError,
)
from libcloud.test.common.test_google import GoogleAuthMockHttp, GoogleTestCase
from libcloud.compute.base import Node, StorageVolume
from libcloud.compute.types import NodeState
from libcloud.test import MockHttp
from libcloud.test.compute import TestCaseMixin
from libcloud.test.file_fixtures import ComputeFileFixtures
from libcloud.test.secrets import GCE_PARAMS, GCE_KEYWORD_PARAMS
class GCENodeDriverTest(GoogleTestCase, TestCaseMixin):
"""
Google Compute Engine Test Class.
"""
# Mock out a few specific calls that interact with the user, system or
# environment.
GCEZone._now = lambda x: datetime.datetime(2013, 6, 26, 19, 0, 0)
datacenter = "us-central1-a"
def setUp(self):
GCEMockHttp.test = self
GCENodeDriver.connectionCls.conn_class = GCEMockHttp
GoogleBaseAuthConnection.conn_class = GoogleAuthMockHttp
GCEMockHttp.type = None
kwargs = GCE_KEYWORD_PARAMS.copy()
kwargs["auth_type"] = "IA"
kwargs["datacenter"] = self.datacenter
self.driver = GCENodeDriver(*GCE_PARAMS, **kwargs)
def test_default_scopes(self):
self.assertIsNone(self.driver.scopes)
def test_build_service_account_gce_struct_default_service_account(self):
result = self.driver._build_service_accounts_gce_list(service_accounts=None)
self.assertEqual(
result,
[
{
"email": "default",
"scopes": ["https://www.googleapis.com/auth/devstorage.read_only"],
}
],
)
def test_build_service_account_gce_struct_no_service_account(self):
result = self.driver._build_service_accounts_gce_list(service_accounts=[])
self.assertEqual(result, [])
def test_build_service_account_gce_struct_custom_service_account(self):
data = [{"email": "1", "scopes": ["a"]}, {"email": "2", "scopes": ["b"]}]
expected_result = [
{"email": "1", "scopes": ["https://www.googleapis.com/auth/a"]},
{"email": "2", "scopes": ["https://www.googleapis.com/auth/b"]},
]
result = self.driver._build_service_accounts_gce_list(service_accounts=data)
self.assertEqual(result, expected_result)
def test_timestamp_to_datetime(self):
timestamp1 = "2013-06-26T10:05:19.340-07:00"
datetime1 = datetime.datetime(2013, 6, 26, 17, 5, 19)
self.assertEqual(timestamp_to_datetime(timestamp1), datetime1)
timestamp2 = "2013-06-26T17:43:15.000-00:00"
datetime2 = datetime.datetime(2013, 6, 26, 17, 43, 15)
self.assertEqual(timestamp_to_datetime(timestamp2), datetime2)
def test_get_object_by_kind(self):
obj = self.driver._get_object_by_kind(None)
self.assertIsNone(obj)
obj = self.driver._get_object_by_kind("")
self.assertIsNone(obj)
obj = self.driver._get_object_by_kind(
"https://www.googleapis.com/compute/v1/projects/project_name/"
"global/targetHttpProxies/web-proxy"
)
self.assertEqual(obj.name, "web-proxy")
def test_get_region_from_zone(self):
zone1 = self.driver.ex_get_zone("us-central1-a")
expected_region1 = "us-central1"
region1 = self.driver._get_region_from_zone(zone1)
self.assertEqual(region1.name, expected_region1)
zone2 = self.driver.ex_get_zone("europe-west1-b")
expected_region2 = "europe-west1"
region2 = self.driver._get_region_from_zone(zone2)
self.assertEqual(region2.name, expected_region2)
def test_get_volume(self):
volume_name = "lcdisk"
volume = self.driver.ex_get_volume(volume_name)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
def test_get_volume_location(self):
volume_name = "lcdisk"
location = self.driver.zone
volume = self.driver.ex_get_volume(volume_name, zone=location)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
def test_get_volume_location_name(self):
volume_name = "lcdisk"
location = self.driver.zone
volume = self.driver.ex_get_volume(volume_name, zone=location.name)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
def test_find_zone_or_region(self):
zone1 = self.driver._find_zone_or_region("libcloud-demo-np-node", "instances")
self.assertEqual(zone1.name, "us-central2-a")
zone2 = self.driver._find_zone_or_region(
"libcloud-demo-europe-np-node", "instances"
)
self.assertEqual(zone2.name, "europe-west1-a")
region = self.driver._find_zone_or_region(
"libcloud-demo-address", "addresses", region=True
)
self.assertEqual(region.name, "us-central1")
def test_match_images(self):
project = "debian-cloud"
image = self.driver._match_images(project, "debian-7")
self.assertEqual(image.name, "debian-7-wheezy-v20131120")
image = self.driver._match_images(project, "backports")
self.assertEqual(image.name, "backports-debian-7-wheezy-v20131127")
def test_build_disk_gce_struct(self):
device_name = "disk_name"
disk_name = None
source = self.driver.ex_get_volume("lcdisk")
is_boot = True
# source as input
d = self.driver._build_disk_gce_struct(
device_name=device_name, source=source, disk_name=disk_name, is_boot=is_boot
)
self.assertEqual(source.extra["selfLink"], d["source"])
self.assertTrue(d["boot"])
self.assertTrue(d["autoDelete"])
self.assertEqual("READ_WRITE", d["mode"])
self.assertFalse("initializeParams" in d)
# image as input
device_name = "disk_name"
disk_type = self.driver.ex_get_disktype("pd-ssd", "us-central1-a")
image = self.driver.ex_get_image("debian-7")
source = None
is_boot = True
d = self.driver._build_disk_gce_struct(
device_name=device_name, disk_type=disk_type, image=image, is_boot=is_boot
)
self.assertEqual("READ_WRITE", d["mode"])
self.assertEqual("PERSISTENT", d["type"])
self.assertTrue(
"initializeParams" in d and isinstance(d["initializeParams"], dict)
)
self.assertTrue(
all(
k in d["initializeParams"]
for k in ["sourceImage", "diskType", "diskName"]
)
)
self.assertTrue(d["initializeParams"]["sourceImage"].startswith("https://"))
self.assertTrue(d["autoDelete"])
self.assertTrue(d["boot"])
def test_build_network_gce_struct(self):
network = self.driver.ex_get_network("lcnetwork")
address = self.driver.ex_get_address("lcaddress")
internalip = self.driver.ex_get_address("testaddress")
subnetwork_name = "cf-972cf02e6ad49112"
subnetwork = self.driver.ex_get_subnetwork(subnetwork_name)
d = self.driver._build_network_gce_struct(network, subnetwork, address)
self.assertTrue("network" in d)
self.assertTrue("subnetwork" in d)
self.assertTrue("kind" in d and d["kind"] == "compute#instanceNetworkInterface")
self.assertEqual(d["accessConfigs"][0]["natIP"], address.address)
# test with internal IP
d = self.driver._build_network_gce_struct(
network, subnetwork, address, internal_ip=internalip
)
self.assertTrue("network" in d)
self.assertTrue("subnetwork" in d)
self.assertTrue("kind" in d and d["kind"] == "compute#instanceNetworkInterface")
self.assertEqual(d["accessConfigs"][0]["natIP"], address.address)
self.assertEqual(d["networkIP"], internalip)
network = self.driver.ex_get_network("default")
d = self.driver._build_network_gce_struct(network)
self.assertTrue("network" in d)
self.assertFalse("subnetwork" in d)
self.assertTrue("kind" in d and d["kind"] == "compute#instanceNetworkInterface")
def test_build_scheduling_gce_struct(self):
self.assertFalse(self.driver._build_scheduling_gce_struct(None, None, None))
# on_host_maintenance bad value should raise a Valueerror
self.assertRaises(
ValueError,
self.driver._build_service_account_gce_struct,
'on_host_maintenance="foobar"',
)
# on_host_maintenance is 'MIGRATE' and prempt is True
self.assertRaises(
ValueError,
self.driver._build_service_account_gce_struct,
'on_host_maintenance="MIGRATE"',
"preemptible=True",
)
# automatic_restart is True and prempt is True
self.assertRaises(
ValueError,
self.driver._build_service_account_gce_struct,
'automatic_restart="True"',
"preemptible=True",
)
actual = self.driver._build_scheduling_gce_struct("TERMINATE", True, False)
self.assertTrue(
"automaticRestart" in actual and actual["automaticRestart"] is True
)
self.assertTrue(
"onHostMaintenance" in actual and actual["onHostMaintenance"] == "TERMINATE"
)
self.assertTrue("preemptible" in actual)
self.assertFalse(actual["preemptible"])
def test_build_service_account_gce_struct(self):
self.assertRaises(
ValueError, self.driver._build_service_account_gce_struct, None
)
input = {"scopes": ["compute-ro"]}
actual = self.driver._build_service_account_gce_struct(input)
self.assertTrue("email" in actual)
self.assertTrue("scopes" in actual)
input = {"scopes": ["compute-ro"], "email": "test@test.com"}
actual = self.driver._build_service_account_gce_struct(input)
self.assertTrue("email" in actual)
self.assertEqual(actual["email"], "test@test.com")
self.assertTrue("scopes" in actual)
def test_build_service_account_gce_list(self):
# ensure we have a list
self.assertRaises(
ValueError, self.driver._build_service_accounts_gce_list, "foo"
)
# no input
actual = self.driver._build_service_accounts_gce_list()
self.assertTrue(len(actual) == 1)
self.assertTrue("email" in actual[0])
self.assertTrue("scopes" in actual[0])
def test_get_selflink_or_name(self):
network = self.driver.ex_get_network("lcnetwork")
# object as input
actual = self.driver._get_selflink_or_name(network, False, "network")
self.assertEqual("lcnetwork", actual)
actual = self.driver._get_selflink_or_name(network, True, "network")
self.assertTrue(actual.startswith("https://"))
# name-only as input
actual = self.driver._get_selflink_or_name("lcnetwork", True, "network")
self.assertTrue(actual.startswith("https://"))
actual = self.driver._get_selflink_or_name("lcnetwork", False, "network")
self.assertTrue("lcnetwork", actual)
# if selflinks is true, we need objname
self.assertRaises(
ValueError, self.driver._get_selflink_or_name, "lcnetwork", True
)
def test_ex_get_serial_output(self):
self.assertRaises(ValueError, self.driver.ex_get_serial_output, "foo")
node = self.driver.ex_get_node("node-name", "us-central1-a")
self.assertTrue(
self.driver.ex_get_serial_output(node),
"This is some serial\r\noutput for you.",
)
def test_ex_list(self):
d = self.driver
# Test the default case for all list methods
# (except list_volume_snapshots, which requires an arg)
for list_fn in (
d.ex_list_addresses,
d.ex_list_backendservices,
d.ex_list_disktypes,
d.ex_list_firewalls,
d.ex_list_forwarding_rules,
d.ex_list_healthchecks,
d.ex_list_networks,
d.ex_list_subnetworks,
d.ex_list_project_images,
d.ex_list_regions,
d.ex_list_routes,
d.ex_list_snapshots,
d.ex_list_targethttpproxies,
d.ex_list_targetinstances,
d.ex_list_targetpools,
d.ex_list_urlmaps,
d.ex_list_zones,
d.list_images,
d.list_locations,
d.list_nodes,
d.list_sizes,
d.list_volumes,
):
full_list = [item.name for item in list_fn()]
li = d.ex_list(list_fn)
iter_list = [item.name for sublist in li for item in sublist]
self.assertEqual(full_list, iter_list)
# Test paging & filtering with a single list function as they require
# additional test fixtures
list_fn = d.ex_list_regions
for count, sublist in zip((2, 1), d.ex_list(list_fn).page(2)):
self.assertTrue(len(sublist) == count)
for sublist in d.ex_list(list_fn).filter("name eq us-central1"):
self.assertTrue(len(sublist) == 1)
self.assertEqual(sublist[0].name, "us-central1")
def test_ex_list_addresses(self):
address_list = self.driver.ex_list_addresses()
address_list_all = self.driver.ex_list_addresses("all")
address_list_uc1 = self.driver.ex_list_addresses("us-central1")
address_list_global = self.driver.ex_list_addresses("global")
self.assertEqual(len(address_list), 2)
self.assertEqual(len(address_list_all), 5)
self.assertEqual(len(address_list_global), 1)
self.assertEqual(address_list[0].name, "libcloud-demo-address")
self.assertEqual(address_list_uc1[0].name, "libcloud-demo-address")
self.assertEqual(address_list_global[0].name, "lcaddressglobal")
names = [a.name for a in address_list_all]
self.assertTrue("libcloud-demo-address" in names)
def test_ex_list_backendservices(self):
self.backendservices_mock = "empty"
backendservices_list = self.driver.ex_list_backendservices()
self.assertListEqual(backendservices_list, [])
self.backendservices_mock = "web-service"
backendservices_list = self.driver.ex_list_backendservices()
web_service = backendservices_list[0]
self.assertEqual(web_service.name, "web-service")
self.assertEqual(len(web_service.healthchecks), 1)
self.assertEqual(len(web_service.backends), 2)
def test_ex_list_healthchecks(self):
healthchecks = self.driver.ex_list_healthchecks()
self.assertEqual(len(healthchecks), 3)
self.assertEqual(healthchecks[0].name, "basic-check")
def test_ex_list_firewalls(self):
firewalls = self.driver.ex_list_firewalls()
self.assertEqual(len(firewalls), 5)
self.assertEqual(firewalls[0].name, "default-allow-internal")
def test_ex_list_forwarding_rules(self):
forwarding_rules = self.driver.ex_list_forwarding_rules()
forwarding_rules_all = self.driver.ex_list_forwarding_rules("all")
forwarding_rules_uc1 = self.driver.ex_list_forwarding_rules("us-central1")
self.assertEqual(len(forwarding_rules), 2)
self.assertEqual(len(forwarding_rules_all), 2)
self.assertEqual(forwarding_rules[0].name, "lcforwardingrule")
self.assertEqual(forwarding_rules_uc1[0].name, "lcforwardingrule")
names = [f.name for f in forwarding_rules_all]
self.assertTrue("lcforwardingrule" in names)
def test_ex_list_forwarding_rules_global(self):
forwarding_rules = self.driver.ex_list_forwarding_rules(global_rules=True)
self.assertEqual(len(forwarding_rules), 2)
self.assertEqual(forwarding_rules[0].name, "http-rule")
names = [f.name for f in forwarding_rules]
self.assertListEqual(names, ["http-rule", "http-rule2"])
def test_list_images(self):
local_images = self.driver.list_images()
all_deprecated_images = self.driver.list_images(ex_include_deprecated=True)
debian_images = self.driver.list_images(ex_project="debian-cloud")
local_plus_deb = self.driver.list_images(["debian-cloud", "project_name"])
self.assertEqual(len(local_images), 52)
self.assertEqual(len(all_deprecated_images), 180)
self.assertEqual(len(debian_images), 2)
self.assertEqual(len(local_plus_deb), 6)
self.assertEqual(local_images[0].name, "custom-image1")
self.assertEqual(local_images[2].name, "custom-image")
self.assertEqual(debian_images[1].name, "debian-7-wheezy-v20131120")
def test_ex_destroy_instancegroup(self):
name = "myname"
zone = "us-central1-a"
uig = self.driver.ex_get_instancegroup(name, zone)
self.assertTrue(self.driver.ex_destroy_instancegroup(uig))
def test_ex_get_instancegroup(self):
name = "myname"
loc = "us-central1-a"
actual = self.driver.ex_get_instancegroup(name, loc)
self.assertEqual(actual.name, name)
self.assertEqual(actual.zone.name, loc)
def test_ex_create_instancegroup(self):
name = "myname"
loc = "us-central1-a"
actual = self.driver.ex_create_instancegroup(name, loc)
self.assertEqual(actual.name, name)
self.assertEqual(actual.zone.name, loc)
def test_ex_list_instancegroups(self):
loc = "us-central1-a"
actual = self.driver.ex_list_instancegroups(loc)
self.assertTrue(len(actual) == 2)
self.assertEqual(actual[0].name, "myname")
self.assertEqual(actual[1].name, "myname2")
def test_ex_list_instancegroups_zone_attribute_not_present_in_response(self):
GCEMockHttp.type = "zone_attribute_not_present"
loc = "us-central1-a"
actual = self.driver.ex_list_instancegroups(loc)
self.assertTrue(len(actual) == 2)
self.assertEqual(actual[0].name, "myname")
self.assertEqual(actual[1].name, "myname2")
def test_ex_instancegroup_list_instances(self):
name = "myname"
loc = "us-central1-a"
gceobj = self.driver.ex_get_instancegroup(name, loc)
actual = self.driver.ex_instancegroup_list_instances(gceobj)
self.assertTrue(len(actual) == 2)
for node in actual:
self.assertTrue(isinstance(node, Node))
self.assertEqual(loc, node.extra["zone"].name)
def test_ex_instancegroup_add_instances(self):
name = "myname"
loc = "us-central1-a"
gceobj = self.driver.ex_get_instancegroup(name, loc)
node_name = self.driver.ex_get_node("node-name", loc)
lcnode = self.driver.ex_get_node("lcnode-001", loc)
node_list = [node_name, lcnode]
self.assertTrue(self.driver.ex_instancegroup_add_instances(gceobj, node_list))
def test_ex_instancegroup_remove_instances(self):
name = "myname"
loc = "us-central1-a"
gceobj = self.driver.ex_get_instancegroup(name, loc)
node_name = self.driver.ex_get_node("node-name", loc)
lcnode = self.driver.ex_get_node("lcnode-001", loc)
node_list = [node_name, lcnode]
self.assertTrue(
self.driver.ex_instancegroup_remove_instances(gceobj, node_list)
)
def test_ex_instancegroup_set_named_ports(self):
name = "myname"
loc = "us-central1-a"
gceobj = self.driver.ex_get_instancegroup(name, loc)
named_ports = [{"name": "foo", "port": 4444}]
# base case
self.assertTrue(
self.driver.ex_instancegroup_set_named_ports(gceobj, named_ports)
)
# specify nothing, default is empty list
self.assertTrue(self.driver.ex_instancegroup_set_named_ports(gceobj))
# specify empty list
self.assertTrue(self.driver.ex_instancegroup_set_named_ports(gceobj, []))
# raise valueerror if string is passed in
self.assertRaises(
ValueError, self.driver.ex_instancegroup_set_named_ports, gceobj, "foobar"
)
# raise valueerror if dictionary is passed in
self.assertRaises(
ValueError,
self.driver.ex_instancegroup_set_named_ports,
gceobj,
{"name": "foo", "port": 4444},
)
def test_ex_instancegroupmanager_set_autohealing_policies(self):
kwargs = {
"host": "lchost",
"path": "/lc",
"port": 8000,
"interval": 10,
"timeout": 10,
"unhealthy_threshold": 4,
"healthy_threshold": 3,
"description": "test healthcheck",
}
healthcheck_name = "lchealthcheck"
hc = self.driver.ex_create_healthcheck(healthcheck_name, **kwargs)
ig_name = "myinstancegroup"
ig_zone = "us-central1-a"
manager = self.driver.ex_get_instancegroupmanager(ig_name, ig_zone)
res = self.driver.ex_instancegroupmanager_set_autohealingpolicies(
manager=manager, healthcheck=hc, initialdelaysec=2
)
self.assertTrue(res)
res = manager.set_autohealingpolicies(healthcheck=hc, initialdelaysec=2)
self.assertTrue(res)
def test_ex_create_instancegroupmanager(self):
name = "myinstancegroup"
zone = "us-central1-a"
size = 4
template_name = "my-instance-template1"
template = self.driver.ex_get_instancetemplate(template_name)
mig = self.driver.ex_create_instancegroupmanager(
name, zone, template, size, base_instance_name="base-foo"
)
self.assertEqual(mig.name, name)
self.assertEqual(mig.size, size)
self.assertEqual(mig.zone.name, zone)
def test_ex_create_instancegroupmanager_shared_network(self):
name = "myinstancegroup-shared-network"
zone = "us-central1-a"
size = 4
template_name = "my-instance-template-shared-network"
template = self.driver.ex_get_instancetemplate(template_name)
mig = self.driver.ex_create_instancegroupmanager(
name, zone, template, size, base_instance_name="base-foo"
)
self.assertEqual(mig.name, name)
self.assertEqual(mig.size, size)
self.assertEqual(mig.zone.name, zone)
def test_ex_create_instancetemplate(self):
name = "my-instance-template1"
actual = self.driver.ex_create_instancetemplate(
name, size="n1-standard-1", image="debian-7", network="default"
)
self.assertEqual(actual.name, name)
self.assertEqual(actual.extra["properties"]["machineType"], "n1-standard-1")
def test_list_locations(self):
locations = self.driver.list_locations()
self.assertEqual(len(locations), 6)
self.assertEqual(locations[0].name, "asia-east1-a")
def test_ex_list_routes(self):
routes = self.driver.ex_list_routes()
self.assertEqual(len(routes), 3)
self.assertTrue("lcdemoroute" in [route.name for route in routes])
def test_ex_list_sslcertificate(self):
ssl_name = "example"
certs = self.driver.ex_list_sslcertificates()
self.assertEqual(certs[0].name, ssl_name)
self.assertTrue(len(certs) == 1)
def test_ex_list_subnetworks(self):
subnetworks = self.driver.ex_list_subnetworks()
self.assertEqual(len(subnetworks), 1)
self.assertEqual(subnetworks[0].name, "cf-972cf02e6ad49112")
self.assertEqual(subnetworks[0].cidr, "10.128.0.0/20")
subnetworks = self.driver.ex_list_subnetworks("all")
self.assertEqual(len(subnetworks), 4)
def test_ex_create_sslcertificate(self):
ssl_name = "example"
private_key = (
"-----BEGIN RSA PRIVATE KEY-----\nfoobar==\n-----END RSA PRIVATE KEY-----\n"
)
certificate = (
"-----BEGIN CERTIFICATE-----\nfoobar==\n-----END CERTIFICATE-----\n"
)
ssl = self.driver.ex_create_sslcertificate(
ssl_name, certificate=certificate, private_key=private_key
)
self.assertEqual(ssl_name, ssl.name)
self.assertEqual(certificate, ssl.certificate)
def test_ex_create_subnetwork(self):
name = "cf-972cf02e6ad49112"
cidr = "10.128.0.0/20"
network_name = "cf"
network = self.driver.ex_get_network(network_name)
region_name = "us-central1"
region = self.driver.ex_get_region(region_name)
description = "LCTestSubnet"
privateipgoogleaccess = True
secondaryipranges = [
{"rangeName": "secondary", "ipCidrRange": "192.168.168.0/24"}
]
# test by network/region name
subnet = self.driver.ex_create_subnetwork(
name,
cidr,
network_name,
region_name,
description=description,
privateipgoogleaccess=privateipgoogleaccess,
secondaryipranges=secondaryipranges,
)
self.assertTrue(isinstance(subnet, GCESubnetwork))
self.assertTrue(isinstance(subnet.region, GCERegion))
self.assertTrue(isinstance(subnet.network, GCENetwork))
self.assertEqual(subnet.name, name)
self.assertEqual(subnet.cidr, cidr)
self.assertEqual(subnet.extra["privateIpGoogleAccess"], privateipgoogleaccess)
self.assertEqual(subnet.extra["secondaryIpRanges"], secondaryipranges)
# test by network/region object
subnet = self.driver.ex_create_subnetwork(name, cidr, network, region)
self.assertTrue(isinstance(subnet, GCESubnetwork))
self.assertTrue(isinstance(subnet.region, GCERegion))
self.assertTrue(isinstance(subnet.network, GCENetwork))
self.assertEqual(subnet.name, name)
self.assertEqual(subnet.cidr, cidr)
self.assertEqual(subnet.extra["privateIpGoogleAccess"], privateipgoogleaccess)
self.assertEqual(subnet.extra["secondaryIpRanges"], secondaryipranges)
def test_ex_destroy_subnetwork(self):
name = "cf-972cf02e6ad49112"
region_name = "us-central1"
region = self.driver.ex_get_region(region_name)
# delete with no region
self.assertTrue(self.driver.ex_destroy_subnetwork(name))
# delete with region name
self.assertTrue(self.driver.ex_destroy_subnetwork(name, region_name))
# delete with region object
self.assertTrue(self.driver.ex_destroy_subnetwork(name, region))
def test_ex_get_sslcertificate(self):
ssl_name = "example"
ssl = self.driver.ex_get_sslcertificate(ssl_name)
self.assertEqual(ssl.name, ssl_name)
self.assertTrue(hasattr(ssl, "certificate"))
self.assertTrue(len(ssl.certificate))
def test_ex_get_accelerator_type(self):
name = "nvidia-tesla-k80"
zone = self.driver.ex_get_zone("us-central1-a")
accelerator_type = self.driver.ex_get_accelerator_type(name, zone)
self.assertEqual(accelerator_type.name, name)
self.assertEqual(accelerator_type.zone, zone)
def test_ex_get_subnetwork(self):
name = "cf-972cf02e6ad49112"
region_name = "us-central1"
region = self.driver.ex_get_region(region_name)
# fetch by no region
subnetwork = self.driver.ex_get_subnetwork(name)
self.assertEqual(subnetwork.name, name)
# fetch by region name
subnetwork = self.driver.ex_get_subnetwork(name, region_name)
self.assertEqual(subnetwork.name, name)
# fetch by region object
subnetwork = self.driver.ex_get_subnetwork(name, region)
self.assertEqual(subnetwork.name, name)
# do the same but this time by resource URL
url = "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/subnetworks/cf-972cf02e6ad49112"
# fetch by no region
subnetwork = self.driver.ex_get_subnetwork(url)
self.assertEqual(subnetwork.name, name)
self.assertEqual(subnetwork.region.name, region_name)
# test with a subnetwork that is under a different project
url_other = "https://www.googleapis.com/compute/v1/projects/other_name/regions/us-central1/subnetworks/cf-972cf02e6ad49114"
subnetwork = self.driver.ex_get_subnetwork(url_other)
self.assertEqual(subnetwork.name, "cf-972cf02e6ad49114")
def test_ex_list_networks(self):
networks = self.driver.ex_list_networks()
self.assertEqual(len(networks), 3)
self.assertEqual(networks[0].name, "cf")
self.assertEqual(networks[0].mode, "auto")
self.assertEqual(len(networks[0].subnetworks), 4)
self.assertEqual(networks[1].name, "custom")
self.assertEqual(networks[1].mode, "custom")
self.assertEqual(len(networks[1].subnetworks), 1)
self.assertEqual(networks[2].name, "default")
self.assertEqual(networks[2].mode, "legacy")
def test_list_nodes(self):
nodes = self.driver.list_nodes()
nodes_all = self.driver.list_nodes(ex_zone="all")
nodes_uc1a = self.driver.list_nodes(ex_zone="us-central1-a")
nodes_uc1b = self.driver.list_nodes(ex_zone="us-central1-b")
self.assertEqual(len(nodes), 1)
self.assertEqual(len(nodes_all), 8)
self.assertEqual(len(nodes_uc1a), 1)
self.assertEqual(len(nodes_uc1b), 0)
self.assertEqual(nodes[0].name, "node-name")
self.assertEqual(nodes_uc1a[0].name, "node-name")
self.assertEqual(nodes_uc1a[0].extra["cpuPlatform"], "Intel Skylake")
self.assertEqual(nodes_uc1a[0].extra["minCpuPlatform"], "Intel Skylake")
names = [n.name for n in nodes_all]
self.assertTrue("node-name" in names)
states = [n.state for n in nodes_all]
self.assertTrue(NodeState.SUSPENDED in states)
def test_ex_list_regions(self):
regions = self.driver.ex_list_regions()
self.assertEqual(len(regions), 3)
self.assertEqual(regions[0].name, "europe-west1")
def test_ex_list_snapshots(self):
snapshots = self.driver.ex_list_snapshots()
self.assertEqual(len(snapshots), 2)
self.assertEqual(snapshots[0].name, "lcsnapshot")
def test_ex_list_targethttpproxies(self):
target_proxies = self.driver.ex_list_targethttpproxies()
self.assertEqual(len(target_proxies), 2)
self.assertEqual(target_proxies[0].name, "web-proxy")
names = [t.name for t in target_proxies]
self.assertListEqual(names, ["web-proxy", "web-proxy2"])
def test_ex_list_targetinstances(self):
target_instances = self.driver.ex_list_targetinstances()
target_instances_all = self.driver.ex_list_targetinstances("all")
target_instances_uc1 = self.driver.ex_list_targetinstances("us-central1-a")
self.assertEqual(len(target_instances), 2)
self.assertEqual(len(target_instances_all), 2)
self.assertEqual(len(target_instances_uc1), 2)
self.assertEqual(target_instances[0].name, "hello")
self.assertEqual(target_instances_uc1[0].name, "hello")
names = [t.name for t in target_instances_all]
self.assertTrue("lctargetinstance" in names)
def test_ex_list_targetpools(self):
target_pools = self.driver.ex_list_targetpools()
target_pools_all = self.driver.ex_list_targetpools("all")
target_pools_uc1 = self.driver.ex_list_targetpools("us-central1")
self.assertEqual(len(target_pools), 4)
self.assertEqual(len(target_pools_all), 5)
self.assertEqual(len(target_pools_uc1), 4)
self.assertEqual(target_pools[0].name, "lctargetpool")
self.assertEqual(target_pools_uc1[0].name, "lctargetpool")
names = [t.name for t in target_pools_all]
self.assertTrue("www-pool" in names)
def test_list_sizes(self):
sizes = self.driver.list_sizes()
sizes_all = self.driver.list_sizes("all")
self.assertEqual(len(sizes), 23)
self.assertEqual(len(sizes_all), 100)
self.assertEqual(sizes[0].name, "f1-micro")
self.assertEqual(sizes[0].extra["zone"].name, "us-central1-a")
self.assertEqual(sizes[1].name, "a2-highgpu-1g")
self.assertEqual(len(sizes[1].extra["accelerators"]), 1)
self.assertEqual(
sizes[1].extra["accelerators"][0]["guestAcceleratorType"],
"nvidia-tesla-v100",
)
names = [s.name for s in sizes_all]
self.assertEqual(names.count("n1-standard-1"), 5)
def test_ex_get_license(self):
license = self.driver.ex_get_license("suse-cloud", "sles-12")
self.assertEqual(license.name, "sles-12")
self.assertTrue(license.charges_use_fee)
def test_list_disktypes(self):
disktypes = self.driver.ex_list_disktypes()
disktypes_all = self.driver.ex_list_disktypes("all")
disktypes_uc1a = self.driver.ex_list_disktypes("us-central1-a")
self.assertEqual(len(disktypes), 2)
self.assertEqual(len(disktypes_all), 9)
self.assertEqual(len(disktypes_uc1a), 2)
self.assertEqual(disktypes[0].name, "pd-ssd")
self.assertEqual(disktypes_uc1a[0].name, "pd-ssd")
names = [v.name for v in disktypes_all]
self.assertTrue("pd-standard" in names)
self.assertTrue("local-ssd" in names)
def test_ex_list_instancegroupmanagers(self):
instancegroupmanagers = self.driver.ex_list_instancegroupmanagers()
instancegroupmanagers_all = self.driver.ex_list_instancegroupmanagers("all")
instancegroupmanagers_ue1b = self.driver.ex_list_instancegroupmanagers(
"us-east1-b"
)
self.assertEqual(len(instancegroupmanagers), 1)
self.assertEqual(len(instancegroupmanagers_all), 2)
self.assertEqual(len(instancegroupmanagers_ue1b), 1)
def test_ex_instancegroupmanager_list_managed_instances(self):
ig_name = "myinstancegroup"
ig_zone = "us-central1-a"
mig = self.driver.ex_get_instancegroupmanager(ig_name, ig_zone)
instances = mig.list_managed_instances()
self.assertTrue(all([x["currentAction"] == "NONE" for x in instances]))
self.assertTrue("base-foo-2vld" in [x["name"] for x in instances])
self.assertEqual(len(instances), 4)
def test_ex_list_instancetemplates(self):
instancetemplates = self.driver.ex_list_instancetemplates()
self.assertEqual(len(instancetemplates), 1)
self.assertEqual(instancetemplates[0].name, "my-instance-template1")
def test_ex_list_autoscalers(self):
autoscalers = self.driver.ex_list_autoscalers("all")
self.assertEqual(len(autoscalers), 1)
self.assertEqual(autoscalers[0].name, "my-autoscaler")
def test_ex_list_urlmaps(self):
urlmaps_list = self.driver.ex_list_urlmaps()
web_map = urlmaps_list[0]
self.assertEqual(web_map.name, "web-map")
self.assertEqual(len(web_map.host_rules), 0)
self.assertEqual(len(web_map.path_matchers), 0)
self.assertEqual(len(web_map.tests), 0)
def test_list_volumes(self):
volumes = self.driver.list_volumes()
volumes_all = self.driver.list_volumes("all")
volumes_uc1a = self.driver.list_volumes("us-central1-a")
self.assertEqual(len(volumes), 2)
self.assertEqual(len(volumes_all), 17)
self.assertEqual(len(volumes_uc1a), 2)
self.assertEqual(volumes[0].name, "lcdisk")
self.assertEqual(volumes_uc1a[0].name, "lcdisk")
names = [v.name for v in volumes_all]
self.assertTrue("libcloud-demo-europe-boot-disk" in names)
def test_ex_list_zones(self):
zones = self.driver.ex_list_zones()
self.assertEqual(len(zones), 6)
self.assertEqual(zones[0].name, "asia-east1-a")
def test_ex_create_address_global(self):
address_name = "lcaddressglobal"
address = self.driver.ex_create_address(address_name, "global")
self.assertTrue(isinstance(address, GCEAddress))
self.assertEqual(address.name, address_name)
self.assertEqual(address.region, "global")
def test_ex_create_address(self):
address_name = "lcaddress"
address = self.driver.ex_create_address(address_name)
self.assertTrue(isinstance(address, GCEAddress))
self.assertEqual(address.name, address_name)
def test_ex_create_address_internal(self):
address_name = "lcaddressinternal"
address = self.driver.ex_create_address(
address_name,
region="us-central1",
address="10.128.0.12",
address_type="INTERNAL",
subnetwork="subnet-1",
)
self.assertTrue(isinstance(address, GCEAddress))
self.assertEqual(address.name, address_name)
self.assertEqual(address.address, "10.128.0.12")
self.assertRaises(
ValueError,
self.driver.ex_create_address,
address_name,
address_type="WRONG",
)
self.assertRaises(
ValueError,
self.driver.ex_create_address,
address_name,
address_type="EXTERNAL",
subnetwork="subnet-1",
)
def test_ex_create_backend(self):
# Note: this is an internal object, no API call is made
# and no fixture is needed specifically for GCEBackend, however
# it does rely on an InstanceGroup object.
ig = self.driver.ex_get_instancegroup("myinstancegroup", "us-central1-a")
backend = self.driver.ex_create_backend(ig)
self.assertTrue(isinstance(backend, GCEBackend))
self.assertEqual(backend.name, "%s/instanceGroups/%s" % (ig.zone.name, ig.name))
self.assertEqual(backend.instance_group.name, ig.name)
self.assertEqual(backend.balancing_mode, "UTILIZATION")
def test_ex_create_backendservice(self):
backendservice_name = "web-service"
ig1 = self.driver.ex_get_instancegroup("myinstancegroup", "us-central1-a")
backend1 = self.driver.ex_create_backend(ig1)
ig2 = self.driver.ex_get_instancegroup("myinstancegroup2", "us-central1-a")
backend2 = self.driver.ex_create_backend(ig2)
backendservice = self.driver.ex_create_backendservice(
name=backendservice_name,
healthchecks=["lchealthcheck"],
backends=[backend1, backend2],
)
self.assertTrue(isinstance(backendservice, GCEBackendService))
self.assertEqual(backendservice.name, backendservice_name)
self.assertEqual(len(backendservice.backends), 2)
ig_links = [ig1.extra["selfLink"], ig2.extra["selfLink"]]
for be in backendservice.backends:
self.assertTrue(be["group"] in ig_links)
def test_ex_create_healthcheck(self):
healthcheck_name = "lchealthcheck"
kwargs = {
"host": "lchost",
"path": "/lc",
"port": 8000,
"interval": 10,
"timeout": 10,
"unhealthy_threshold": 4,
"healthy_threshold": 3,
"description": "test healthcheck",
}
hc = self.driver.ex_create_healthcheck(healthcheck_name, **kwargs)
self.assertTrue(isinstance(hc, GCEHealthCheck))
self.assertEqual(hc.name, healthcheck_name)
self.assertEqual(hc.path, "/lc")
self.assertEqual(hc.port, 8000)
self.assertEqual(hc.interval, 10)
self.assertEqual(hc.extra["host"], "lchost")
self.assertEqual(hc.extra["description"], "test healthcheck")
def test_ex_create_image(self):
volume = self.driver.ex_get_volume("lcdisk")
description = (
"CoreOS, CoreOS stable, 1520.6.0, amd64-usr published on 2017-10-12"
)
name = "coreos"
family = "coreos-stable"
licenses = ["projects/coreos-cloud/global/licenses/coreos-stable"]
guest_os_features = ["VIRTIO_SCSI_MULTIQUEUE"]
expected_features = [{"type": "VIRTIO_SCSI_MULTIQUEUE"}]
mock_request = mock.Mock()
mock_request.side_effect = self.driver.connection.async_request
self.driver.connection.async_request = mock_request
image = self.driver.ex_create_image(
name,
volume,
description=description,
family=family,
guest_os_features=guest_os_features,
ex_licenses=licenses,
)
self.assertTrue(isinstance(image, GCENodeImage))
self.assertTrue(image.name.startswith(name))
self.assertEqual(image.extra["description"], description)
self.assertEqual(image.extra["family"], family)
self.assertEqual(image.extra["guestOsFeatures"], expected_features)
self.assertEqual(image.extra["licenses"][0].name, licenses[0].split("/")[-1])
expected_data = {
"description": description,
"family": family,
"guestOsFeatures": expected_features,
"name": name,
"licenses": licenses,
"sourceDisk": volume.extra["selfLink"],
"zone": volume.extra["zone"].name,
}
mock_request.assert_called_once_with(
"/global/images", data=expected_data, method="POST"
)
def test_ex_copy_image(self):
name = "coreos"
url = "gs://storage.core-os.net/coreos/amd64-generic/247.0.0/coreos_production_gce.tar.gz"
description = (
"CoreOS, CoreOS stable, 1520.6.0, amd64-usr published on 2017-10-12"
)
family = "coreos-stable"
guest_os_features = ["VIRTIO_SCSI_MULTIQUEUE"]
expected_features = [{"type": "VIRTIO_SCSI_MULTIQUEUE"}]
image = self.driver.ex_copy_image(
name,
url,
description=description,
family=family,
guest_os_features=guest_os_features,
)
self.assertTrue(image.name.startswith(name))
self.assertEqual(image.extra["description"], description)
self.assertEqual(image.extra["family"], family)
self.assertEqual(image.extra["guestOsFeatures"], expected_features)
def test_ex_create_firewall(self):
name = "lcfirewall"
priority = 900
description = "Libcloud Test Firewall"
allowed = [{"IPProtocol": "tcp", "ports": ["4567"]}]
source_service_accounts = ["lcsource@gserviceaccount.com"]
target_tags = ["libcloud"]
network = "default"
firewall = self.driver.ex_create_firewall(
name,
allowed,
description=description,
network=network,
priority=priority,
target_tags=target_tags,
source_service_accounts=source_service_accounts,
)
self.assertTrue(isinstance(firewall, GCEFirewall))
self.assertEqual(firewall.name, name)
def test_ex_create_firewall_egress(self):
name = "lcfirewall-egress"
priority = 900
direction = "EGRESS"
description = "Libcloud Egress Firewall"
allowed = [{"IPProtocol": "tcp", "ports": ["4567"]}]
target_service_accounts = ["lctarget@gserviceaccount.com"]
target_ranges = ["8.8.8.8/32"]
network = "default"
firewall = self.driver.ex_create_firewall(
name,
allowed,
description=description,
network=network,
priority=priority,
direction=direction,
target_ranges=target_ranges,
target_service_accounts=target_service_accounts,
)
self.assertTrue(isinstance(firewall, GCEFirewall))
self.assertEqual(firewall.name, name)
def test_ex_create_firewall_deny(self):
name = "lcfirewall-deny"
priority = 900
denied = [{"IPProtocol": "tcp", "ports": ["4567"]}]
description = "Libcloud Deny Firewall"
source_ranges = ["10.240.100.0/24"]
source_tags = ["libcloud"]
network = "default"
firewall = self.driver.ex_create_firewall(
name,
denied=denied,
description=description,
network=network,
priority=priority,
source_tags=source_tags,
source_ranges=source_ranges,
)
self.assertTrue(isinstance(firewall, GCEFirewall))
self.assertEqual(firewall.name, name)
def test_ex_create_forwarding_rule(self):
fwr_name = "lcforwardingrule"
targetpool = "lctargetpool"
region = "us-central1"
address = "lcaddress"
port_range = "8000-8500"
description = "test forwarding rule"
fwr = self.driver.ex_create_forwarding_rule(
fwr_name,
targetpool,
region=region,
address=address,
port_range=port_range,
description=description,
)
self.assertTrue(isinstance(fwr, GCEForwardingRule))
self.assertEqual(fwr.name, fwr_name)
self.assertEqual(fwr.region.name, region)
self.assertEqual(fwr.protocol, "TCP")
self.assertEqual(fwr.extra["portRange"], port_range)
self.assertEqual(fwr.extra["description"], description)
def test_ex_create_forwarding_rule_global(self):
fwr_name = "http-rule"
target_name = "web-proxy"
address = "lcaddressglobal"
port_range = "80-80"
description = "global forwarding rule"
for target in (target_name, self.driver.ex_get_targethttpproxy(target_name)):
fwr = self.driver.ex_create_forwarding_rule(
fwr_name,
target,
global_rule=True,
address=address,
port_range=port_range,
description=description,
)
self.assertTrue(isinstance(fwr, GCEForwardingRule))
self.assertEqual(fwr.name, fwr_name)
self.assertEqual(fwr.extra["portRange"], port_range)
self.assertEqual(fwr.extra["description"], description)
def test_ex_create_forwarding_rule_targetpool_keyword(self):
"""Test backwards compatibility with the targetpool kwarg."""
fwr_name = "lcforwardingrule"
targetpool = "lctargetpool"
region = "us-central1"
address = self.driver.ex_get_address("lcaddress")
port_range = "8000-8500"
description = "test forwarding rule"
fwr = self.driver.ex_create_forwarding_rule(
fwr_name,
targetpool=targetpool,
region=region,
address=address,
port_range=port_range,
description=description,
)
self.assertTrue(isinstance(fwr, GCEForwardingRule))
self.assertEqual(fwr.name, fwr_name)
self.assertEqual(fwr.region.name, region)
self.assertEqual(fwr.protocol, "TCP")
self.assertEqual(fwr.extra["portRange"], port_range)
self.assertEqual(fwr.extra["description"], description)
def test_ex_create_route(self):
route_name = "lcdemoroute"
dest_range = "192.168.25.0/24"
priority = 1000
route = self.driver.ex_create_route(route_name, dest_range)
self.assertTrue(isinstance(route, GCERoute))
self.assertEqual(route.name, route_name)
self.assertEqual(route.priority, priority)
self.assertTrue("tag1" in route.tags)
self.assertTrue(route.extra["nextHopInstance"].endswith("libcloud-100"))
self.assertEqual(route.dest_range, dest_range)
def test_ex_create_network(self):
network_name = "lcnetwork"
cidr = "10.11.0.0/16"
routing_mode = "REGIONAL"
network = self.driver.ex_create_network(
network_name, cidr, routing_mode="regional"
)
self.assertTrue(isinstance(network, GCENetwork))
self.assertEqual(network.name, network_name)
self.assertEqual(network.cidr, cidr)
# Test using more options
description = "A custom network"
network = self.driver.ex_create_network(
network_name, cidr, description=description, routing_mode=routing_mode
)
self.assertEqual(network.extra["description"], description)
self.assertEqual(network.extra["routingConfig"]["routingMode"], routing_mode)
def test_ex_create_network_bad_options(self):
network_name = "lcnetwork"
cidr = "10.11.0.0/16"
self.assertRaises(
ValueError, self.driver.ex_create_network, network_name, cidr, mode="auto"
)
self.assertRaises(
ValueError, self.driver.ex_create_network, network_name, cidr, mode="foobar"
)
self.assertRaises(
ValueError, self.driver.ex_create_network, network_name, None, mode="legacy"
)
self.assertRaises(
ValueError,
self.driver.ex_create_network,
network_name,
cidr,
routing_mode="universal",
)
def test_ex_set_machine_type_notstopped(self):
# get running node, change machine type
zone = "us-central1-a"
node = self.driver.ex_get_node("node-name", zone)
self.assertRaises(
GoogleBaseError, self.driver.ex_set_machine_type, node, "custom-4-61440"
)
def test_ex_set_machine_type(self):
# get stopped node, change machine type
zone = "us-central1-a"
node = self.driver.ex_get_node("stopped-node", zone)
self.assertEqual(node.size, "n1-standard-1")
self.assertEqual(node.extra["status"], "TERMINATED")
self.assertTrue(self.driver.ex_set_machine_type(node, "custom-4-11264"))
def test_ex_node_start(self):
zone = "us-central1-a"
node = self.driver.ex_get_node("stopped-node", zone)
self.assertTrue(self.driver.ex_start_node(node))
def test_ex_node_stop(self):
zone = "us-central1-a"
node = self.driver.ex_get_node("node-name", zone)
self.assertTrue(self.driver.ex_stop_node(node))
# try and stop a stopped node (should work)
zone = "us-central1-a"
node = self.driver.ex_get_node("stopped-node", zone)
self.assertTrue(self.driver.ex_stop_node(node))
def test_create_node_req(self):
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
location = self.driver.zone
network = self.driver.ex_get_network("default")
tags = ["libcloud"]
metadata = [{"key": "test_key", "value": "test_value"}]
boot_disk = self.driver.ex_get_volume("lcdisk")
node_request, node_data = self.driver._create_node_req(
"lcnode", size, image, location, network, tags, metadata, boot_disk
)
self.assertEqual(node_request, "/zones/%s/instances" % location.name)
self.assertEqual(node_data["metadata"]["items"][0]["key"], "test_key")
self.assertEqual(node_data["tags"]["items"][0], "libcloud")
self.assertEqual(node_data["name"], "lcnode")
self.assertTrue(node_data["disks"][0]["boot"])
self.assertIsInstance(node_data["serviceAccounts"], list)
self.assertIsInstance(node_data["serviceAccounts"][0], dict)
self.assertEqual(node_data["serviceAccounts"][0]["email"], "default")
self.assertIsInstance(node_data["serviceAccounts"][0]["scopes"], list)
self.assertEqual(len(node_data["serviceAccounts"][0]["scopes"]), 1)
self.assertEqual(len(node_data["networkInterfaces"]), 1)
self.assertTrue(
node_data["networkInterfaces"][0]["network"].startswith("https://")
)
def test_create_node_location_not_provided(self):
# location is not specified neither via datacenter constructor argument
# nor via location method argument
node_name = "node-name"
size = self.driver.ex_get_size("n1-standard-1")
del size.extra["zone"]
image = self.driver.ex_get_image("debian-7")
self.driver.zone = None
expected_msg = "Zone not provided"
self.assertRaisesRegex(
ValueError, expected_msg, self.driver.create_node, node_name, size, image
)
def test_create_node_location_not_provided_inferred_from_size(self):
# test a scenario where node location is inferred from NodeSize zone attribute
node_name = "node-name"
size = self.driver.ex_get_size("n1-standard-1")
image = self.driver.ex_get_image("debian-7")
zone = self.driver.ex_list_zones()[0]
zone = self.driver.ex_get_zone("us-central1-a")
self.driver.zone = None
size.extra["zone"] = zone
node = self.driver.create_node(node_name, size, image)
self.assertTrue(node)
def test_create_node_network_opts(self):
node_name = "node-name"
size = self.driver.ex_get_size("n1-standard-1")
image = self.driver.ex_get_image("debian-7")
zone = self.driver.ex_get_zone("us-central1-a")
network = self.driver.ex_get_network("lcnetwork")
address = self.driver.ex_get_address("lcaddress")
ex_nic_gce_struct = [
{
"network": "global/networks/lcnetwork",
"accessConfigs": [{"name": "lcnetwork-test", "type": "ONE_TO_ONE_NAT"}],
}
]
# Test using default
node = self.driver.create_node(node_name, size, image)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
# Test using just the network
node = self.driver.create_node(
node_name, size, image, location=zone, ex_network=network
)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
# Test using just the struct
node = self.driver.create_node(
node_name, size, image, location=zone, ex_nic_gce_struct=ex_nic_gce_struct
)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
# Test both address and struct, should fail
self.assertRaises(
ValueError,
self.driver.create_node,
node_name,
size,
image,
location=zone,
external_ip=address,
ex_nic_gce_struct=ex_nic_gce_struct,
)
# Test both ex_network and struct, should fail
self.assertRaises(
ValueError,
self.driver.create_node,
node_name,
size,
image,
location=zone,
ex_network=network,
ex_nic_gce_struct=ex_nic_gce_struct,
)
def test_create_node_subnetwork_opts(self):
node_name = "sn-node-name"
size = self.driver.ex_get_size("n1-standard-1")
image = self.driver.ex_get_image("debian-7")
zone = self.driver.ex_get_zone("us-central1-a")
network = self.driver.ex_get_network("custom-network")
subnetwork = self.driver.ex_get_subnetwork("cf-972cf02e6ad49112")
ex_nic_gce_struct = [
{
"network": "global/networks/custom-network",
"subnetwork": "projects/project_name/regions/us-central1/subnetworks/cf-972cf02e6ad49112",
"accessConfigs": [{"name": "External NAT", "type": "ONE_TO_ONE_NAT"}],
}
]
# Test using just the network and subnetwork
node = self.driver.create_node(
node_name,
size,
image,
location=zone,
ex_network=network,
ex_subnetwork=subnetwork,
)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
self.assertEqual(
node.extra["networkInterfaces"][0]["subnetwork"].split("/")[-1],
"cf-972cf02e6ad49112",
)
# Test using just the struct
node = self.driver.create_node(
node_name, size, image, location=zone, ex_nic_gce_struct=ex_nic_gce_struct
)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
self.assertEqual(
node.extra["networkInterfaces"][0]["subnetwork"].split("/")[-1],
"cf-972cf02e6ad49112",
)
# Test using subnetwork selfLink
node = self.driver.create_node(
node_name,
size,
image,
location=zone,
ex_network=network,
ex_subnetwork=subnetwork.extra["selfLink"],
)
self.assertEqual(node.extra["networkInterfaces"][0]["name"], "nic0")
self.assertEqual(
node.extra["networkInterfaces"][0]["subnetwork"].split("/")[-1],
"cf-972cf02e6ad49112",
)
def test_create_node_disk_opts(self):
node_name = "node-name"
size = self.driver.ex_get_size("n1-standard-1")
image = self.driver.ex_get_image("debian-7")
boot_disk = self.driver.ex_get_volume("lcdisk")
disk_type = self.driver.ex_get_disktype("pd-ssd", "us-central1-a")
DEMO_BASE_NAME = "lc-test"
gce_disk_struct = [
{
"type": "PERSISTENT",
"deviceName": "%s-gstruct" % DEMO_BASE_NAME,
"initializeParams": {
"diskName": "%s-gstruct" % DEMO_BASE_NAME,
"sourceImage": image.extra["selfLink"],
},
"boot": True,
"autoDelete": True,
},
{
"type": "SCRATCH",
"deviceName": "%s-gstruct-lssd" % DEMO_BASE_NAME,
"initializeParams": {"diskType": disk_type.extra["selfLink"]},
"autoDelete": True,
},
]
self.assertRaises(ValueError, self.driver.create_node, node_name, size, None)
node = self.driver.create_node(node_name, size, image)
self.assertTrue(isinstance(node, Node))
node = self.driver.create_node(node_name, size, None, ex_boot_disk=boot_disk)
self.assertTrue(isinstance(node, Node))
node = self.driver.create_node(
node_name, size, None, ex_disks_gce_struct=gce_disk_struct
)
self.assertTrue(isinstance(node, Node))
self.assertRaises(
ValueError,
self.driver.create_node,
node_name,
size,
None,
ex_boot_disk=boot_disk,
ex_disks_gce_struct=gce_disk_struct,
)
def test_create_node(self):
node_name = "node-name"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
node = self.driver.create_node(node_name, size, image)
self.assertTrue(isinstance(node, Node))
self.assertEqual(node.name, node_name)
def test_create_node_disk_size(self):
node_name = "node-name"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
disk_size = 25
node = self.driver.create_node(node_name, size, image, ex_disk_size=disk_size)
self.assertTrue(isinstance(node, Node))
self.assertEqual(node.name, node_name)
self.assertEqual(node.extra["boot_disk"].size, str(disk_size))
def test_create_node_image_family(self):
node_name = "node-name"
size = self.driver.ex_get_size("n1-standard-1")
node = self.driver.create_node(
node_name, size, image=None, ex_image_family="coreos-stable"
)
self.assertTrue(isinstance(node, Node))
self.assertEqual(node.name, node_name)
image = self.driver.ex_get_image("debian-7")
self.assertRaises(
ValueError,
self.driver.create_node,
node_name,
size,
image,
ex_image_family="coreos-stable",
)
def test_create_node_req_with_serviceaccounts(self):
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
location = self.driver.zone
network = self.driver.ex_get_network("default")
# ex_service_accounts with specific scopes, default 'email'
ex_sa = [{"scopes": ["compute-ro", "pubsub", "storage-ro"]}]
node_request, node_data = self.driver._create_node_req(
"lcnode", size, image, location, network, ex_service_accounts=ex_sa
)
self.assertIsInstance(node_data["serviceAccounts"], list)
self.assertIsInstance(node_data["serviceAccounts"][0], dict)
self.assertEqual(node_data["serviceAccounts"][0]["email"], "default")
self.assertIsInstance(node_data["serviceAccounts"][0]["scopes"], list)
self.assertEqual(len(node_data["serviceAccounts"][0]["scopes"]), 3)
self.assertTrue(
"https://www.googleapis.com/auth/devstorage.read_only"
in node_data["serviceAccounts"][0]["scopes"]
)
self.assertTrue(
"https://www.googleapis.com/auth/compute.readonly"
in node_data["serviceAccounts"][0]["scopes"]
)
def test_format_metadata(self):
in_md = [{"key": "k0", "value": "v0"}, {"key": "k1", "value": "v1"}]
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 2)
self.assertTrue(out_md["items"][0]["key"] in ["k0", "k1"])
self.assertTrue(out_md["items"][0]["value"] in ["v0", "v1"])
in_md = [{"k0": "v0"}, {"k1": "v1"}]
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 2)
self.assertTrue(out_md["items"][0]["key"] in ["k0", "k1"])
self.assertTrue(out_md["items"][0]["value"] in ["v0", "v1"])
in_md = {"key": "k0", "value": "v0"}
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 1, out_md)
self.assertEqual(out_md["items"][0]["key"], "k0")
self.assertEqual(out_md["items"][0]["value"], "v0")
in_md = {"k0": "v0"}
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 1)
self.assertEqual(out_md["items"][0]["key"], "k0")
self.assertEqual(out_md["items"][0]["value"], "v0")
in_md = {"k0": "v0", "k1": "v1", "k2": "v2"}
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 3)
keys = [x["key"] for x in out_md["items"]]
vals = [x["value"] for x in out_md["items"]]
keys.sort()
vals.sort()
self.assertEqual(keys, ["k0", "k1", "k2"])
self.assertEqual(vals, ["v0", "v1", "v2"])
in_md = {"items": [{"key": "k0", "value": "v0"}, {"key": "k1", "value": "v1"}]}
out_md = self.driver._format_metadata("fp", in_md)
self.assertTrue("fingerprint" in out_md)
self.assertEqual(out_md["fingerprint"], "fp")
self.assertTrue("items" in out_md)
self.assertEqual(len(out_md["items"]), 2)
self.assertTrue(out_md["items"][0]["key"] in ["k0", "k1"])
self.assertTrue(out_md["items"][0]["value"] in ["v0", "v1"])
in_md = {"items": "foo"}
self.assertRaises(ValueError, self.driver._format_metadata, "fp", in_md)
in_md = {"items": {"key": "k1", "value": "v0"}}
self.assertRaises(ValueError, self.driver._format_metadata, "fp", in_md)
in_md = ["k0", "v1"]
self.assertRaises(ValueError, self.driver._format_metadata, "fp", in_md)
def test_create_node_with_metadata(self):
node_name = "node-name"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
zone = self.driver.ex_get_zone("us-central1-a")
# md is a list of dicts, each with 'key' and 'value' for
# backwards compatibility
md = [{"key": "k0", "value": "v0"}, {"key": "k1", "value": "v1"}]
request, data = self.driver._create_node_req(
node_name, size, image, zone, metadata=md
)
self.assertTrue("items" in data["metadata"])
self.assertEqual(len(data["metadata"]["items"]), 2)
# md doesn't contain "items" key
md = {"key": "key1", "value": "value1"}
request, data = self.driver._create_node_req(
node_name, size, image, zone, metadata=md
)
self.assertTrue("items" in data["metadata"])
self.assertEqual(len(data["metadata"]["items"]), 1)
# md contains "items" key
md = {"items": [{"key": "k0", "value": "v0"}]}
request, data = self.driver._create_node_req(
node_name, size, image, zone, metadata=md
)
self.assertTrue("items" in data["metadata"])
self.assertEqual(len(data["metadata"]["items"]), 1)
self.assertEqual(data["metadata"]["items"][0]["key"], "k0")
self.assertEqual(data["metadata"]["items"][0]["value"], "v0")
def test_create_node_with_accelerator(self):
node_name = "node-name"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
zone = self.driver.ex_get_zone("us-central1-a")
request, data = self.driver._create_node_req(
node_name,
size,
image,
zone,
ex_accelerator_type="nvidia-tesla-k80",
ex_accelerator_count=3,
)
self.assertTrue("guestAccelerators" in data)
self.assertEqual(len(data["guestAccelerators"]), 1)
self.assertTrue(
"nvidia-tesla-k80" in data["guestAccelerators"][0]["acceleratorType"]
)
self.assertEqual(data["guestAccelerators"][0]["acceleratorCount"], 3)
def test_create_node_with_labels(self):
node_name = "node-name"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
zone = self.driver.ex_get_zone("us-central1-a")
# labels is a dict
labels = {"label1": "v1", "label2": "v2"}
request, data = self.driver._create_node_req(
node_name, size, image, zone, ex_labels=labels
)
self.assertTrue(data["labels"] is not None)
self.assertEqual(len(data["labels"]), 2)
self.assertEqual(data["labels"]["label1"], "v1")
self.assertEqual(data["labels"]["label2"], "v2")
def test_create_node_existing(self):
node_name = "libcloud-demo-europe-np-node"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1", zone="europe-west1-a")
self.assertRaises(
ResourceExistsError,
self.driver.create_node,
node_name,
size,
image,
location="europe-west1-a",
)
def test_ex_create_multiple_nodes(self):
base_name = "lcnode"
image = self.driver.ex_get_image("debian-7")
size = self.driver.ex_get_size("n1-standard-1")
number = 2
disk_size = "25"
# NOTE: We use small poll_interval to speed up the tests
nodes = self.driver.ex_create_multiple_nodes(
base_name, size, image, number, ex_disk_size=disk_size, poll_interval=0.1
)
self.assertEqual(len(nodes), 2)
self.assertTrue(isinstance(nodes[0], Node))
self.assertTrue(isinstance(nodes[1], Node))
self.assertEqual(nodes[0].name, "%s-000" % base_name)
self.assertEqual(nodes[1].name, "%s-001" % base_name)
self.assertEqual(nodes[0].extra["boot_disk"].size, disk_size)
self.assertEqual(nodes[1].extra["boot_disk"].size, disk_size)
def test_ex_create_multiple_nodes_image_family(self):
base_name = "lcnode"
image = None
size = self.driver.ex_get_size("n1-standard-1")
number = 2
# NOTE: We use small poll_interval to speed up the tests
nodes = self.driver.ex_create_multiple_nodes(
base_name,
size,
image,
number,
ex_image_family="coreos-stable",
poll_interval=0.1,
)
self.assertEqual(len(nodes), 2)
self.assertTrue(isinstance(nodes[0], Node))
self.assertTrue(isinstance(nodes[1], Node))
self.assertEqual(nodes[0].name, "%s-000" % base_name)
self.assertEqual(nodes[1].name, "%s-001" % base_name)
image = self.driver.ex_get_image("debian-7")
self.assertRaises(
ValueError,
self.driver.ex_create_multiple_nodes,
base_name,
size,
image,
number,
ex_image_family="coreos-stable",
)
def test_ex_create_targethttpproxy(self):
proxy_name = "web-proxy"
urlmap_name = "web-map"
for urlmap in (urlmap_name, self.driver.ex_get_urlmap(urlmap_name)):
proxy = self.driver.ex_create_targethttpproxy(proxy_name, urlmap)
self.assertTrue(isinstance(proxy, GCETargetHttpProxy))
self.assertEqual(proxy_name, proxy.name)
def test_ex_create_targetinstance(self):
targetinstance_name = "lctargetinstance"
zone = "us-central1-a"
node = self.driver.ex_get_node("node-name", zone)
targetinstance = self.driver.ex_create_targetinstance(
targetinstance_name, zone=zone, node=node
)
self.assertEqual(targetinstance.name, targetinstance_name)
self.assertEqual(targetinstance.zone.name, zone)
def test_ex_create_targetpool(self):
targetpool_name = "lctargetpool"
region = "us-central1"
healthchecks = ["libcloud-lb-demo-healthcheck"]
node1 = self.driver.ex_get_node("libcloud-lb-demo-www-000", "us-central1-b")
node2 = self.driver.ex_get_node("libcloud-lb-demo-www-001", "us-central1-b")
nodes = [node1, node2]
targetpool = self.driver.ex_create_targetpool(
targetpool_name, region=region, healthchecks=healthchecks, nodes=nodes
)
self.assertEqual(targetpool.name, targetpool_name)
self.assertEqual(len(targetpool.nodes), len(nodes))
self.assertEqual(targetpool.region.name, region)
def test_ex_create_targetpool_session_affinity(self):
targetpool_name = "lctargetpool-sticky"
region = "us-central1"
session_affinity = "CLIENT_IP_PROTO"
targetpool = self.driver.ex_create_targetpool(
targetpool_name, region=region, session_affinity=session_affinity
)
self.assertEqual(targetpool.name, targetpool_name)
self.assertEqual(targetpool.extra.get("sessionAffinity"), session_affinity)
def test_ex_create_urlmap(self):
urlmap_name = "web-map"
for service in (
"web-service",
self.driver.ex_get_backendservice("web-service"),
):
urlmap = self.driver.ex_create_urlmap(urlmap_name, service)
self.assertTrue(isinstance(urlmap, GCEUrlMap))
self.assertEqual(urlmap_name, urlmap.name)
def test_create_volume_image_family(self):
volume_name = "lcdisk"
size = 10
volume = self.driver.create_volume(
size, volume_name, ex_image_family="coreos-stable"
)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
image = self.driver.ex_get_image("debian-7")
self.assertRaises(
ValueError,
self.driver.create_volume,
size,
volume_name,
image=image,
ex_image_family="coreos-stable",
)
def test_create_volume_location(self):
volume_name = "lcdisk"
size = 10
zone = self.driver.zone
volume = self.driver.create_volume(size, volume_name, location=zone)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
def test_ex_create_volume_snapshot(self):
snapshot_name = "lcsnapshot"
volume = self.driver.ex_get_volume("lcdisk")
snapshot = volume.snapshot(snapshot_name)
self.assertEqual(snapshot.name, snapshot_name)
self.assertEqual(snapshot.size, "10")
def test_create_volume_ssd(self):
volume_name = "lcdisk"
size = 10
volume = self.driver.create_volume(size, volume_name, ex_disk_type="pd-ssd")
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.extra["type"], "pd-ssd")
def test_create_volume(self):
volume_name = "lcdisk"
size = 10
volume = self.driver.create_volume(size, volume_name)
self.assertTrue(isinstance(volume, StorageVolume))
self.assertEqual(volume.name, volume_name)
def test_ex_set_volume_labels(self):
volume_name = "lcdisk"
zone = self.driver.zone
volume_labels = {"one": "1", "two": "2", "three": "3"}
size = 10
new_vol = self.driver.create_volume(size, volume_name, location=zone)
self.assertTrue(self.driver.ex_set_volume_labels(new_vol, labels=volume_labels))
exist_vol = self.driver.ex_get_volume(volume_name, self.driver.zone)
self.assertEqual(exist_vol.extra["labels"], volume_labels)
def test_ex_update_healthcheck(self):
healthcheck_name = "lchealthcheck"
healthcheck = self.driver.ex_get_healthcheck(healthcheck_name)
healthcheck.port = 9000
healthcheck2 = self.driver.ex_update_healthcheck(healthcheck)
self.assertTrue(isinstance(healthcheck2, GCEHealthCheck))
def test_ex_update_firewall(self):
firewall_name = "lcfirewall"
firewall = self.driver.ex_get_firewall(firewall_name)
firewall.source_ranges = ["10.0.0.0/16"]
firewall.description = "LCFirewall-2"
firewall2 = self.driver.ex_update_firewall(firewall)
self.assertTrue(isinstance(firewall2, GCEFirewall))
def test_ex_targetpool_gethealth(self):
targetpool = self.driver.ex_get_targetpool("lb-pool")
health = targetpool.get_health("libcloud-lb-demo-www-000")
self.assertEqual(len(health), 1)
self.assertTrue("node" in health[0])
self.assertTrue("health" in health[0])
self.assertEqual(health[0]["health"], "UNHEALTHY")
def test_ex_targetpool_with_backup_pool(self):
targetpool = self.driver.ex_get_targetpool("lb-pool")
self.assertTrue("backupPool" in targetpool.extra)
self.assertTrue("failoverRatio" in targetpool.extra)
def test_ex_targetpool_setbackup(self):
targetpool = self.driver.ex_get_targetpool("lb-pool")
backup_targetpool = self.driver.ex_get_targetpool("backup-pool")
self.assertTrue(targetpool.set_backup_targetpool(backup_targetpool, 0.1))
def test_ex_targetpool_remove_add_node(self):
targetpool = self.driver.ex_get_targetpool("lctargetpool")
node = self.driver.ex_get_node("libcloud-lb-demo-www-001", "us-central1-b")
remove_node = self.driver.ex_targetpool_remove_node(targetpool, node)
self.assertTrue(remove_node)
self.assertEqual(len(targetpool.nodes), 1)
add_node = self.driver.ex_targetpool_add_node(
targetpool, node.extra["selfLink"]
)
self.assertTrue(add_node)
self.assertEqual(len(targetpool.nodes), 2)
remove_node = self.driver.ex_targetpool_remove_node(
targetpool, node.extra["selfLink"]
)
self.assertTrue(remove_node)
self.assertEqual(len(targetpool.nodes), 1)
add_node = self.driver.ex_targetpool_add_node(targetpool, node)
self.assertTrue(add_node)
self.assertEqual(len(targetpool.nodes), 2)
# check that duplicates are filtered
add_node = self.driver.ex_targetpool_add_node(
targetpool, node.extra["selfLink"]
)
self.assertTrue(add_node)
self.assertEqual(len(targetpool.nodes), 2)
def test_ex_targetpool_remove_add_healthcheck(self):
targetpool = self.driver.ex_get_targetpool("lctargetpool")
healthcheck = self.driver.ex_get_healthcheck("libcloud-lb-demo-healthcheck")
remove_healthcheck = self.driver.ex_targetpool_remove_healthcheck(
targetpool, healthcheck
)
self.assertTrue(remove_healthcheck)
self.assertEqual(len(targetpool.healthchecks), 0)
add_healthcheck = self.driver.ex_targetpool_add_healthcheck(
targetpool, healthcheck
)
self.assertTrue(add_healthcheck)
self.assertEqual(len(targetpool.healthchecks), 1)
def test_reboot_node(self):
node = self.driver.ex_get_node("node-name")
reboot = self.driver.reboot_node(node)
self.assertTrue(reboot)
def test_ex_set_node_tags(self):
new_tags = ["libcloud"]
node = self.driver.ex_get_node("node-name")
set_tags = self.driver.ex_set_node_tags(node, new_tags)
self.assertTrue(set_tags)
def test_attach_volume_invalid_usecase(self):
node = self.driver.ex_get_node("node-name")
self.assertRaises(ValueError, self.driver.attach_volume, node, None)
self.assertRaises(
ValueError,
self.driver.attach_volume,
node,
None,
ex_source="foo/bar",
device=None,
)
def test_attach_volume(self):
volume = self.driver.ex_get_volume("lcdisk")
node = self.driver.ex_get_node("node-name")
attach = volume.attach(node)
self.assertTrue(attach)
def test_ex_resize_volume(self):
volume = self.driver.ex_get_volume("lcdisk")
desired_size = int(volume.size) + 8
resize = self.driver.ex_resize_volume(volume, desired_size)
self.assertTrue(resize)
def test_detach_volume(self):
volume = self.driver.ex_get_volume("lcdisk")
node = self.driver.ex_get_node("node-name")
# This fails since the node is required
detach = volume.detach()
self.assertFalse(detach)
# This should pass
detach = self.driver.detach_volume(volume, node)
self.assertTrue(detach)
def test_ex_destroy_address_global(self):
address = self.driver.ex_get_address("lcaddressglobal", "global")
self.assertEqual(address.name, "lcaddressglobal")
self.assertEqual(address.region, "global")
destroyed = address.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_address(self):
address = self.driver.ex_get_address("lcaddress")
destroyed = address.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_backendservice(self):
backendservice = self.driver.ex_get_backendservice("web-service")
destroyed = backendservice.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_healthcheck(self):
hc = self.driver.ex_get_healthcheck("lchealthcheck")
destroyed = hc.destroy()
self.assertTrue(destroyed)
def test_ex_delete_image(self):
self.assertRaises(
ResourceNotFoundError, self.driver.ex_get_image, "missing-image"
)
self.assertRaises(
ResourceNotFoundError, self.driver.ex_delete_image, "missing-image"
)
image = self.driver.ex_get_image("debian-7")
deleted = self.driver.ex_delete_image(image)
self.assertTrue(deleted)
def test_ex_deprecate_image(self):
dep_ts = "2064-03-11T20:18:36.194-07:00"
obs_ts = "2074-03-11T20:18:36.194-07:00"
del_ts = "2084-03-11T20:18:36.194-07:00"
image = self.driver.ex_get_image("debian-7-wheezy-v20131014")
deprecated = image.deprecate(
"debian-7", "DEPRECATED", deprecated=dep_ts, obsolete=obs_ts, deleted=del_ts
)
self.assertTrue(deprecated)
self.assertEqual(image.extra["deprecated"]["deprecated"], dep_ts)
self.assertEqual(image.extra["deprecated"]["obsolete"], obs_ts)
self.assertEqual(image.extra["deprecated"]["deleted"], del_ts)
def test_ex_destroy_firewall(self):
firewall = self.driver.ex_get_firewall("lcfirewall")
destroyed = firewall.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_forwarding_rule(self):
fwr = self.driver.ex_get_forwarding_rule("lcforwardingrule")
destroyed = fwr.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_forwarding_rule_global(self):
fwr = self.driver.ex_get_forwarding_rule("http-rule", global_rule=True)
destroyed = fwr.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_route(self):
route = self.driver.ex_get_route("lcdemoroute")
destroyed = route.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_network(self):
network = self.driver.ex_get_network("lcnetwork")
destroyed = network.destroy()
self.assertTrue(destroyed)
def test_destroy_node(self):
node = self.driver.ex_get_node("node-name")
destroyed = node.destroy()
self.assertTrue(destroyed)
def test_ex_destroy_multiple_nodes(self):
nodes = []
nodes.append(self.driver.ex_get_node("lcnode-000"))
nodes.append(self.driver.ex_get_node("lcnode-001"))
destroyed = self.driver.ex_destroy_multiple_nodes(nodes)
for d in destroyed:
self.assertTrue(d)
def test_destroy_targethttpproxy(self):
proxy = self.driver.ex_get_targethttpproxy("web-proxy")
destroyed = proxy.destroy()
self.assertTrue(destroyed)
def test_destroy_targetinstance(self):
targetinstance = self.driver.ex_get_targetinstance("lctargetinstance")
self.assertEqual(targetinstance.name, "lctargetinstance")
destroyed = targetinstance.destroy()
self.assertTrue(destroyed)
def test_destroy_targetpool(self):
targetpool = self.driver.ex_get_targetpool("lctargetpool")
destroyed = targetpool.destroy()
self.assertTrue(destroyed)
def test_destroy_urlmap(self):
urlmap = self.driver.ex_get_urlmap("web-map")
destroyed = urlmap.destroy()
self.assertTrue(destroyed)
def test_destroy_volume(self):
disk = self.driver.ex_get_volume("lcdisk")
destroyed = disk.destroy()
self.assertTrue(destroyed)
def test_ex_set_volume_auto_delete(self):
node = self.driver.ex_get_node("node-name")
volume = node.extra["boot_disk"]
auto_delete = self.driver.ex_set_volume_auto_delete(volume, node)
self.assertTrue(auto_delete)
def test_destroy_volume_snapshot(self):
snapshot = self.driver.ex_get_snapshot("lcsnapshot")
destroyed = snapshot.destroy()
self.assertTrue(destroyed)
def test_ex_get_address_global(self):
address_name = "lcaddressglobal"
address = self.driver.ex_get_address(address_name, "global")
self.assertEqual(address.name, address_name)
self.assertEqual(address.address, "173.99.99.99")
self.assertEqual(address.region, "global")
self.assertEqual(address.extra["status"], "RESERVED")
def test_ex_get_address(self):
address_name = "lcaddress"
address = self.driver.ex_get_address(address_name)
self.assertEqual(address.name, address_name)
self.assertEqual(address.address, "173.255.113.20")
self.assertEqual(address.region.name, "us-central1")
self.assertEqual(address.extra["status"], "RESERVED")
def test_ex_get_backendservice(self):
web_service = self.driver.ex_get_backendservice("web-service")
self.assertEqual(web_service.name, "web-service")
self.assertEqual(web_service.protocol, "HTTP")
self.assertEqual(web_service.port, 80)
self.assertEqual(web_service.timeout, 30)
self.assertEqual(web_service.healthchecks[0].name, "basic-check")
self.assertEqual(len(web_service.healthchecks), 1)
backends = web_service.backends
self.assertEqual(len(backends), 2)
self.assertEqual(backends[0]["balancingMode"], "RATE")
self.assertEqual(backends[0]["maxRate"], 100)
self.assertEqual(backends[0]["capacityScaler"], 1.0)
web_service = self.driver.ex_get_backendservice("no-backends")
self.assertEqual(web_service.name, "web-service")
self.assertEqual(web_service.healthchecks[0].name, "basic-check")
self.assertEqual(len(web_service.healthchecks), 1)
self.assertEqual(len(web_service.backends), 0)
def test_ex_get_healthcheck(self):
healthcheck_name = "lchealthcheck"
healthcheck = self.driver.ex_get_healthcheck(healthcheck_name)
self.assertEqual(healthcheck.name, healthcheck_name)
self.assertEqual(healthcheck.port, 8000)
self.assertEqual(healthcheck.path, "/lc")
def test_ex_get_firewall(self):
firewall_name = "lcfirewall"
firewall = self.driver.ex_get_firewall(firewall_name)
self.assertEqual(firewall.name, firewall_name)
self.assertEqual(firewall.network.name, "default")
self.assertEqual(firewall.target_tags, ["libcloud"])
def test_ex_get_forwarding_rule(self):
fwr_name = "lcforwardingrule"
fwr = self.driver.ex_get_forwarding_rule(fwr_name)
self.assertEqual(fwr.name, fwr_name)
self.assertEqual(fwr.extra["portRange"], "8000-8500")
self.assertEqual(fwr.targetpool.name, "lctargetpool")
self.assertEqual(fwr.protocol, "TCP")
def test_ex_get_forwarding_rule_global(self):
fwr_name = "http-rule"
fwr = self.driver.ex_get_forwarding_rule(fwr_name, global_rule=True)
self.assertEqual(fwr.name, fwr_name)
self.assertEqual(fwr.extra["portRange"], "80-80")
self.assertEqual(fwr.targetpool.name, "web-proxy")
self.assertEqual(fwr.protocol, "TCP")
self.assertEqual(fwr.address, "192.0.2.1")
self.assertEqual(fwr.targetpool.name, "web-proxy")
def test_ex_get_image_license(self):
image = self.driver.ex_get_image("sles-12-v20141023")
self.assertTrue("licenses" in image.extra)
self.assertEqual(image.extra["licenses"][0].name, "sles-12")
self.assertTrue(image.extra["licenses"][0].charges_use_fee)
def test_ex_get_image(self):
partial_name = "debian-7"
image = self.driver.ex_get_image(partial_name)
self.assertEqual(image.name, "debian-7-wheezy-v20131120")
# A 'debian-7' image exists in the local project
self.assertTrue(image.extra["description"].startswith("Debian"))
partial_name = "debian-6"
image = self.driver.ex_get_image(partial_name)
self.assertEqual(image.name, "debian-6-squeeze-v20130926")
self.assertTrue(image.extra["description"].startswith("Debian"))
partial_name = "debian-7"
image = self.driver.ex_get_image(partial_name, ["debian-cloud"])
self.assertEqual(image.name, "debian-7-wheezy-v20131120")
partial_name = "debian-7"
self.assertRaises(
ResourceNotFoundError,
self.driver.ex_get_image,
partial_name,
"suse-cloud",
ex_standard_projects=False,
)
def test_ex_get_image_from_family(self):
family = "coreos-beta"
description = "CoreOS beta 522.3.0"
image = self.driver.ex_get_image_from_family(family)
self.assertEqual(image.name, "coreos-beta-522-3-0-v20141226")
self.assertEqual(image.extra["description"], description)
self.assertEqual(image.extra["family"], family)
url = (
"https://www.googleapis.com/compute/v1/projects/coreos-cloud/"
"global/images/family/coreos-beta"
)
image = self.driver.ex_get_image_from_family(url)
self.assertEqual(image.name, "coreos-beta-522-3-0-v20141226")
self.assertEqual(image.extra["description"], description)
self.assertEqual(image.extra["family"], family)
project_list = ["coreos-cloud"]
image = self.driver.ex_get_image_from_family(
family, ex_project_list=project_list, ex_standard_projects=False
)
self.assertEqual(image.name, "coreos-beta-522-3-0-v20141226")
self.assertEqual(image.extra["description"], description)
self.assertEqual(image.extra["family"], family)
self.assertRaises(
ResourceNotFoundError, self.driver.ex_get_image_from_family, "nofamily"
)
def test_ex_get_route(self):
route_name = "lcdemoroute"
route = self.driver.ex_get_route(route_name)
self.assertEqual(route.name, route_name)
self.assertEqual(route.dest_range, "192.168.25.0/24")
self.assertEqual(route.priority, 1000)
def test_ex_get_network(self):
network_name = "lcnetwork"
network = self.driver.ex_get_network(network_name)
self.assertEqual(network.name, network_name)
self.assertEqual(network.cidr, "10.11.0.0/16")
self.assertEqual(network.extra["gatewayIPv4"], "10.11.0.1")
self.assertEqual(network.extra["description"], "A custom network")
# do the same but this time with URL
url = "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/lcnetwork"
network = self.driver.ex_get_network(url)
self.assertEqual(network.name, network_name)
self.assertEqual(network.cidr, "10.11.0.0/16")
self.assertEqual(network.extra["gatewayIPv4"], "10.11.0.1")
self.assertEqual(network.extra["description"], "A custom network")
# do the same but with a network under a different project
url_other = "https://www.googleapis.com/compute/v1/projects/other_name/global/networks/lcnetwork"
network = self.driver.ex_get_network(url_other)
self.assertEqual(network.name, network_name)
self.assertEqual(network.cidr, "10.11.0.0/16")
self.assertEqual(network.extra["gatewayIPv4"], "10.11.0.1")
self.assertEqual(network.extra["description"], "A custom network")
def test_ex_get_node(self):
node_name = "node-name"
zone = "us-central1-a"
node = self.driver.ex_get_node(node_name, zone)
self.assertEqual(node.name, node_name)
self.assertEqual(node.size, "n1-standard-1")
removed_node = "libcloud-lb-demo-www-002"
self.assertRaises(
ResourceNotFoundError,
self.driver.ex_get_node,
removed_node,
"us-central1-b",
)
missing_node = "dummy-node"
self.assertRaises(
ResourceNotFoundError, self.driver.ex_get_node, missing_node, "all"
)
def test_ex_get_project(self):
project = self.driver.ex_get_project()
self.assertEqual(project.name, "project_name")
networks_quota = project.quotas[1]
self.assertEqual(networks_quota["usage"], 3)
self.assertEqual(networks_quota["limit"], 5)
self.assertEqual(networks_quota["metric"], "NETWORKS")
self.assertTrue("fingerprint" in project.extra["commonInstanceMetadata"])
self.assertTrue("items" in project.extra["commonInstanceMetadata"])
self.assertTrue("usageExportLocation" in project.extra)
self.assertTrue("bucketName" in project.extra["usageExportLocation"])
self.assertEqual(
project.extra["usageExportLocation"]["bucketName"],
"gs://graphite-usage-reports",
)
def test_ex_add_access_config(self):
self.assertRaises(
ValueError, self.driver.ex_add_access_config, "node", "name", "nic"
)
node = self.driver.ex_get_node("node-name", "us-central1-a")
self.assertTrue(self.driver.ex_add_access_config(node, "foo", "bar"))
def test_ex_delete_access_config(self):
self.assertRaises(
ValueError, self.driver.ex_add_access_config, "node", "name", "nic"
)
node = self.driver.ex_get_node("node-name", "us-central1-a")
self.assertTrue(self.driver.ex_delete_access_config(node, "foo", "bar"))
def test_ex_set_usage_export_bucket(self):
self.assertRaises(ValueError, self.driver.ex_set_usage_export_bucket, "foo")
bucket_name = "gs://foo"
self.driver.ex_set_usage_export_bucket(bucket_name)
bucket_name = "https://www.googleapis.com/foo"
self.driver.ex_set_usage_export_bucket(bucket_name)
project = GCEProject(
id=None, name=None, metadata=None, quotas=None, driver=self.driver
)
project.set_usage_export_bucket(bucket=bucket_name)
def test__set_project_metadata(self):
self.assertEqual(len(self.driver._set_project_metadata(None, False, "")), 0)
# 'delete' metadata, but retain current sshKeys
md = self.driver._set_project_metadata(None, False, "this is a test")
self.assertEqual(len(md), 1)
self.assertEqual(md[0]["key"], "sshKeys")
self.assertEqual(md[0]["value"], "this is a test")
# 'delete' metadata *and* any existing sshKeys
md = self.driver._set_project_metadata(None, True, "this is a test")
self.assertEqual(len(md), 0)
# add new metadata, keep existing sshKeys, since the new value also
# has 'sshKeys', we want the final struct to only have one ke/value
# of sshKeys and it should be the "current_keys"
gce_md = {
"items": [
{"key": "foo", "value": "one"},
{"key": "sshKeys", "value": "another test"},
]
}
md = self.driver._set_project_metadata(gce_md, False, "this is a test")
self.assertEqual(len(md), 2, str(md))
sshKeys = ""
count = 0
for d in md:
if d["key"] == "sshKeys":
count += 1
sshKeys = d["value"]
self.assertEqual(sshKeys, "this is a test")
self.assertEqual(count, 1)
# add new metadata, overwrite existing sshKeys, in this case, the
# existing 'sshKeys' value should be replaced
gce_md = {
"items": [
{"key": "foo", "value": "one"},
{"key": "sshKeys", "value": "another test"},
]
}
md = self.driver._set_project_metadata(gce_md, True, "this is a test")
self.assertEqual(len(md), 2, str(md))
sshKeys = ""
count = 0
for d in md:
if d["key"] == "sshKeys":
count += 1
sshKeys = d["value"]
self.assertEqual(sshKeys, "another test")
self.assertEqual(count, 1)
# add new metadata, remove existing sshKeys. in this case, we had an
# 'sshKeys' entry, but it will be removed entirely
gce_md = {
"items": [{"key": "foo", "value": "one"}, {"key": "nokeys", "value": "two"}]
}
md = self.driver._set_project_metadata(gce_md, True, "this is a test")
self.assertEqual(len(md), 2, str(md))
sshKeys = ""
count = 0
for d in md:
if d["key"] == "sshKeys":
count += 1
sshKeys = d["value"]
self.assertEqual(sshKeys, "")
self.assertEqual(count, 0)
def test_ex_set_common_instance_metadata(self):
# test non-dict
self.assertRaises(
ValueError, self.driver.ex_set_common_instance_metadata, ["bad", "type"]
)
# test standard python dict
pydict = {"key": "pydict", "value": 1}
self.driver.ex_set_common_instance_metadata(pydict)
# test GCE badly formatted dict
bad_gcedict = {"items": "foo"}
self.assertRaises(
ValueError, self.driver.ex_set_common_instance_metadata, bad_gcedict
)
# test gce formatted dict
gcedict = {
"items": [
{"key": "gcedict1", "value": "v1"},
{"key": "gcedict2", "value": "v2"},
]
}
self.driver.ex_set_common_instance_metadata(gcedict)
# Verify project notation works
project = GCEProject(
id=None, name=None, metadata=None, quotas=None, driver=self.driver
)
project.set_common_instance_metadata(metadata=gcedict)
def test_ex_set_node_metadata(self):
node = self.driver.ex_get_node("node-name", "us-central1-a")
# test non-dict
self.assertRaises(
ValueError, self.driver.ex_set_node_metadata, node, ["bad", "type"]
)
# test standard python dict
pydict = {"key": "pydict", "value": 1}
self.driver.ex_set_node_metadata(node, pydict)
# test GCE badly formatted dict
bad_gcedict = {"items": "foo"}
self.assertRaises(
ValueError, self.driver.ex_set_node_metadata, node, bad_gcedict
)
# test gce formatted dict
gcedict = {
"items": [
{"key": "gcedict1", "value": "v1"},
{"key": "gcedict2", "value": "v2"},
]
}
self.driver.ex_set_node_metadata(node, gcedict)
def test_ex_set_node_labels(self):
node = self.driver.ex_get_node("node-name", "us-central1-a")
# Test basic values
simplelabel = {"key": "value"}
self.driver.ex_set_node_labels(node, simplelabel)
# Test multiple values
multilabels = {"item1": "val1", "item2": "val2"}
self.driver.ex_set_node_labels(node, multilabels)
def test_ex_set_image_labels(self):
image = self.driver.ex_get_image("custom-image")
# Test basic values
simplelabel = {"foo": "bar"}
self.driver.ex_set_image_labels(image, simplelabel)
image = self.driver.ex_get_image("custom-image")
self.assertTrue("foo" in image.extra["labels"])
# Test multiple values
multilabels = {"one": "1", "two": "two"}
self.driver.ex_set_image_labels(image, multilabels)
image = self.driver.ex_get_image("custom-image")
self.assertEqual(len(image.extra["labels"]), 3)
self.assertTrue("two" in image.extra["labels"])
self.assertTrue("two" in image.extra["labels"])
def test_ex_get_region(self):
region_name = "us-central1"
region = self.driver.ex_get_region(region_name)
self.assertEqual(region.name, region_name)
self.assertEqual(region.status, "UP")
self.assertEqual(region.zones[0].name, "us-central1-a")
def test_ex_get_size(self):
size_name = "n1-standard-1"
size = self.driver.ex_get_size(size_name)
self.assertEqual(size.name, size_name)
self.assertEqual(size.extra["zone"].name, "us-central1-a")
self.assertEqual(size.disk, 10)
self.assertEqual(size.ram, 3840)
self.assertEqual(size.extra["guestCpus"], 1)
def test_ex_get_targethttpproxy(self):
targethttpproxy_name = "web-proxy"
targethttpproxy = self.driver.ex_get_targethttpproxy(targethttpproxy_name)
self.assertEqual(targethttpproxy.name, targethttpproxy_name)
self.assertEqual(targethttpproxy.urlmap.name, "web-map")
def test_ex_get_targetinstance(self):
targetinstance_name = "lctargetinstance"
targetinstance = self.driver.ex_get_targetinstance(targetinstance_name)
self.assertEqual(targetinstance.name, targetinstance_name)
self.assertEqual(targetinstance.zone.name, "us-central1-a")
def test_ex_get_targetpool(self):
targetpool_name = "lctargetpool"
targetpool = self.driver.ex_get_targetpool(targetpool_name)
self.assertEqual(targetpool.name, targetpool_name)
self.assertEqual(len(targetpool.nodes), 2)
self.assertEqual(targetpool.region.name, "us-central1")
def test_ex_get_instancegroupmanager(self):
igmgr_name = "myinstancegroup"
igmgr = self.driver.ex_get_instancegroupmanager(igmgr_name, "us-central1-b")
self.assertEqual(igmgr.name, igmgr_name)
self.assertEqual(igmgr.size, 4)
self.assertEqual(igmgr.zone.name, "us-central1-b")
# search all zones
igmgr = self.driver.ex_get_instancegroupmanager(igmgr_name)
self.assertEqual(igmgr.name, igmgr_name)
self.assertEqual(igmgr.size, 4)
self.assertEqual(igmgr.zone.name, "us-central1-a")
def test_ex_get_instancetemplate(self):
instancetemplate_name = "my-instance-template1"
instancetemplate = self.driver.ex_get_instancetemplate(instancetemplate_name)
self.assertEqual(instancetemplate.name, instancetemplate_name)
self.assertEqual(
instancetemplate.extra["properties"]["machineType"], "n1-standard-1"
)
def test_ex_get_snapshot(self):
snapshot_name = "lcsnapshot"
snapshot = self.driver.ex_get_snapshot(snapshot_name)
self.assertEqual(snapshot.name, snapshot_name)
self.assertEqual(snapshot.size, "10")
self.assertEqual(snapshot.status, "READY")
def test_ex_get_urlmap(self):
urlmap_name = "web-map"
urlmap = self.driver.ex_get_urlmap(urlmap_name)
self.assertEqual(urlmap.name, urlmap_name)
self.assertEqual(urlmap.default_service.name, "web-service")
def test_ex_get_volume(self):
volume_name = "lcdisk"
volume = self.driver.ex_get_volume(volume_name)
self.assertEqual(volume.name, volume_name)
self.assertEqual(volume.size, "10")
self.assertEqual(volume.extra["status"], "READY")
self.assertEqual(volume.extra["type"], "pd-ssd")
def test_ex_get_disktype(self):
disktype_name = "pd-ssd"
disktype_zone = "us-central1-a"
disktype = self.driver.ex_get_disktype(disktype_name, disktype_zone)
self.assertEqual(disktype.name, disktype_name)
self.assertEqual(disktype.zone.name, disktype_zone)
self.assertEqual(disktype.extra["description"], "SSD Persistent Disk")
self.assertEqual(disktype.extra["valid_disk_size"], "10GB-10240GB")
self.assertEqual(disktype.extra["default_disk_size_gb"], "100")
# zone not set
disktype_name = "pd-ssd"
disktype = self.driver.ex_get_disktype(disktype_name)
self.assertEqual(disktype.name, disktype_name)
def test_ex_get_zone(self):
zone_name = "us-central1-b"
zone = self.driver.ex_get_zone(zone_name)
self.assertEqual(zone.name, zone_name)
self.assertFalse(zone.time_until_mw)
self.assertFalse(zone.next_mw_duration)
zone_no_mw = self.driver.ex_get_zone("us-central1-a")
self.assertIsNone(zone_no_mw.time_until_mw)
class GCEMockHttp(MockHttp, unittest.TestCase):
fixtures = ComputeFileFixtures("gce")
json_hdr = {"content-type": "application/json; charset=UTF-8"}
def _get_method_name(self, type, use_param, qs, path):
api_path = "/compute/%s" % API_VERSION
project_path = "/projects/%s" % GCE_KEYWORD_PARAMS["project"]
path = path.replace(api_path, "")
# This replace is separate, since there is a call with a different
# project name
path = path.replace(project_path, "")
# The path to get project information is the base path, so use a fake
# '/project' path instead
if not path:
path = "/project"
method_name = super(GCEMockHttp, self)._get_method_name(
type, use_param, qs, path
)
return method_name
def _setUsageExportBucket(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("setUsageExportBucket_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_custom_node(self, method, url, body, header):
body = self.fixtures.load("zones_us_central1_a_instances_custom_node.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_setMachineType(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_instances_node_name_setMachineType.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_setMachineType_notstopped(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_operations_operation_setMachineType_notstopped.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_custom_node_setMachineType(
self, method, url, body, header
):
body = {
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid value for field 'resource.machineTypes': "
"'projects/project_name/zones/us-central1-a/machineTypes/custom-1-61440'. Resource was not found.",
}
],
"code": 400,
"message": "Invalid value for field 'resource.machineTypes': "
"'projects/project_name/zones/us-central1-a/machineTypes/custom-1-61440'. Resource was not found.",
}
}
return (
httplib.BAD_REQUEST,
body,
self.json_hdr,
httplib.responses[httplib.BAD_REQUEST],
)
def _zones_us_central1_a_instances_stopped_node_setMachineType(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_instances_stopped_node_setMachineType.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_setMachineType(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_operations_operation_setMachineType.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_startnode(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_operations_operation_startnode.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_stopped_node_start(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_instances_stopped_node_start.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_stopped_node_stop(
self, method, url, body, header
):
body = self.fixtures.load(
"zones_us_central1_a_instances_stopped_node_stop.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_stopped_node(self, method, url, body, headers):
body = self.fixtures.load("zones_us_central1_a_instances_stopped_node.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_stopnode(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_operations_operation_stopnode.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_stop(self, method, url, body, headers):
body = self.fixtures.load("zones_us_central1_a_instances_node_name_stop.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_acceleratorTypes_nvidia_tesla_k80(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_acceleratorTypes_nvidia_tesla_k80.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_setMetadata(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_instances_node_name_setMetadata_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_setLabels(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_instances_node_name_setLabels_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_images_custom_image_setLabels(self, method, url, body, headers):
self.assertTrue("global/images/custom-image/setLabels" in url)
body = self.fixtures.load("global_custom_image_setLabels_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _setCommonInstanceMetadata(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("setCommonInstanceMetadata_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_subnetworks(self, method, url, body, headers):
body = self.fixtures.load("aggregated_subnetworks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_addresses(self, method, url, body, headers):
body = self.fixtures.load("aggregated_addresses.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_diskTypes(self, method, url, body, headers):
body = self.fixtures.load("aggregated_disktypes.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_disks(self, method, url, body, headers):
body = self.fixtures.load("aggregated_disks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_forwardingRules(self, method, url, body, headers):
body = self.fixtures.load("aggregated_forwardingRules.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_instances(self, method, url, body, headers):
body = self.fixtures.load("aggregated_instances.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_instanceGroupManagers(self, method, url, body, headers):
body = self.fixtures.load("aggregated_instanceGroupManagers.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_machineTypes(self, method, url, body, headers):
body = self.fixtures.load("aggregated_machineTypes.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_targetInstances(self, method, url, body, headers):
body = self.fixtures.load("aggregated_targetInstances.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_targetPools(self, method, url, body, headers):
body = self.fixtures.load("aggregated_targetPools.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_backendServices(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_backendServices_post.json")
else:
backend_name = getattr(self.test, "backendservices_mock", "web-service")
body = self.fixtures.load("global_backendServices-%s.json" % backend_name)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_backendServices_no_backends(self, method, url, body, headers):
body = self.fixtures.load("global_backendServices_no_backends.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_backendServices_web_service(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_backendServices_web_service_delete.json")
else:
body = self.fixtures.load("global_backendServices_web_service.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_forwardingRules(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_forwardingRules_post.json")
else:
body = self.fixtures.load("global_forwardingRules.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_forwardingRules_http_rule(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_forwardingRules_http_rule_delete.json")
else:
body = self.fixtures.load("global_forwardingRules_http_rule.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_httpHealthChecks(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_httpHealthChecks_post.json")
else:
body = self.fixtures.load("global_httpHealthChecks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_httpHealthChecks_default_health_check(self, method, url, body, headers):
body = self.fixtures.load("global_httpHealthChecks_basic-check.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_httpHealthChecks_basic_check(self, method, url, body, headers):
body = self.fixtures.load("global_httpHealthChecks_basic-check.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_httpHealthChecks_libcloud_lb_demo_healthcheck(
self, method, url, body, headers
):
body = self.fixtures.load(
"global_httpHealthChecks_libcloud-lb-demo-healthcheck.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_httpHealthChecks_lchealthcheck(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"global_httpHealthChecks_lchealthcheck_delete.json"
)
elif method == "PUT":
body = self.fixtures.load("global_httpHealthChecks_lchealthcheck_put.json")
else:
body = self.fixtures.load("global_httpHealthChecks_lchealthcheck.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_firewalls(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_firewalls_post.json")
else:
body = self.fixtures.load("global_firewalls.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_firewalls_lcfirewall(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_firewalls_lcfirewall_delete.json")
elif method == "PUT":
body = self.fixtures.load("global_firewalls_lcfirewall_put.json")
else:
body = self.fixtures.load("global_firewalls_lcfirewall.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_firewalls_lcfirewall_egress(self, method, url, body, headers):
body = self.fixtures.load("global_firewalls_lcfirewall-egress.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_firewalls_lcfirewall_deny(self, method, url, body, headers):
body = self.fixtures.load("global_firewalls_lcfirewall-deny.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_images(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_images_post.json")
elif "maxResults" in url and "pageToken" not in url:
body = self.fixtures.load("global_images_paged.json")
else:
if "maxResults" in url:
self.assertIn("pageToken=token", url)
body = self.fixtures.load("global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_images_debian_7_wheezy_v20131120(self, method, url, body, headers):
body = self.fixtures.load("global_images_debian_7_wheezy_v20131120_delete.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_images_debian_7_wheezy_v20131014_deprecate(
self, method, url, body, headers
):
body = self.fixtures.load(
"global_images_debian_7_wheezy_v20131014_deprecate.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_images_family_coreos_beta(self, method, url, body, headers):
body = self.fixtures.load("global_images_family_notfound.json")
return (
httplib.NOT_FOUND,
body,
self.json_hdr,
httplib.responses[httplib.NOT_FOUND],
)
def _global_images_family_coreos_stable(self, method, url, body, headers):
body = self.fixtures.load("global_images_family_notfound.json")
return (
httplib.NOT_FOUND,
body,
self.json_hdr,
httplib.responses[httplib.NOT_FOUND],
)
def _global_images_family_nofamily(self, method, url, body, headers):
body = self.fixtures.load("global_images_family_notfound.json")
return (
httplib.NOT_FOUND,
body,
self.json_hdr,
httplib.responses[httplib.NOT_FOUND],
)
def _global_routes(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_routes_post.json")
else:
body = self.fixtures.load("global_routes.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_networks_post.json")
else:
body = self.fixtures.load("global_networks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_custom_network(self, method, url, body, headers):
body = self.fixtures.load("global_networks_custom_network.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_cf(self, method, url, body, headers):
body = self.fixtures.load("global_networks_cf.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_default(self, method, url, body, headers):
body = self.fixtures.load("global_networks_default.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_libcloud_demo_network(self, method, url, body, headers):
body = self.fixtures.load("global_networks_libcloud-demo-network.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_libcloud_demo_europe_network(self, method, url, body, headers):
body = self.fixtures.load("global_networks_libcloud-demo-europe-network.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_routes_lcdemoroute(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_routes_lcdemoroute_delete.json")
else:
body = self.fixtures.load("global_routes_lcdemoroute.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_networks_lcnetwork(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_networks_lcnetwork_delete.json")
else:
body = self.fixtures.load("global_networks_lcnetwork.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_snapshots(self, method, url, body, headers):
body = self.fixtures.load("global_snapshots.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_snapshots_lcsnapshot(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_snapshots_lcsnapshot_delete.json")
else:
body = self.fixtures.load("global_snapshots_lcsnapshot.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_setUsageExportBucket(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_setUsageExportBucket.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_setCommonInstanceMetadata(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_setCommonInstanceMetadata.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_backendServices_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_backendServices_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_backendServices_web_service_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_backendServices_web_service_delete" ".json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_forwardingRules_http_rule_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_forwardingRules_http_rule_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_forwardingRules_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_forwardingRules_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_httpHealthChecks_lchealthcheck_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_httpHealthChecks_lchealthcheck_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_images_debian7_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_images_debian7_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_httpHealthChecks_lchealthcheck_put(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_httpHealthChecks_lchealthcheck_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_httpHealthChecks_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_httpHealthChecks_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_firewalls_lcfirewall_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_firewalls_lcfirewall_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_firewalls_lcfirewall_put(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_firewalls_lcfirewall_put.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_firewalls_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_firewalls_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_routes_lcdemoroute_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_routes_lcdemoroute_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_networks_lcnetwork_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_networks_lcnetwork_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_routes_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_routes_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_networks_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_networks_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_snapshots_lcsnapshot_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_snapshots_lcsnapshot_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_image_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_image_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_addresses_lcaddressglobal_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_addresses_lcaddressglobal_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_targetHttpProxies_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_targetHttpProxies_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_targetHttpProxies_web_proxy_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_targetHttpProxies_web_proxy_delete" ".json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_urlMaps_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_urlMaps_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_urlMaps_web_map_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_urlMaps_web_map_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_targetHttpProxies(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_targetHttpProxies_post.json")
else:
body = self.fixtures.load("global_targetHttpProxies.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_targetHttpProxies_web_proxy(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_targetHttpProxies_web_proxy_delete.json")
else:
body = self.fixtures.load("global_targetHttpProxies_web_proxy.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_urlMaps(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_urlMaps_post.json")
else:
body = self.fixtures.load("global_urlMaps.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_urlMaps_web_map(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_urlMaps_web_map_delete.json")
else:
body = self.fixtures.load("global_urlMaps_web_map.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_east1_subnetworks_cf_972cf02e6ad49113(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-east1_subnetworks_cf_972cf02e6ad49113.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_subnetworks_cf_972cf02e6ad49112(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_subnetworks_cf_972cf02e6ad49112.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_regions_us_central1(self, method, url, body, headers):
body = self.fixtures.load("projects_other_name_regions_us-central1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_global_networks_lcnetwork(
self, method, url, body, headers
):
body = self.fixtures.load("projects_other_name_global_networks_lcnetwork.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_global_networks_cf(self, method, url, body, headers):
body = self.fixtures.load("projects_other_name_global_networks_cf.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_global_networks_shared_network_for_mig(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_other_name_global_networks_shared_network_for_mig.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_regions_us_central1_subnetworks_cf_972cf02e6ad49114(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_other_name_regions_us-central1_subnetworks_cf_972cf02e6ad49114.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_other_name_regions_us_central1_subnetworks_shared_subnetwork_for_mig(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_other_name_regions_us-central1_subnetworks_shared_subnetwork_for_mig.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_addresses_lcaddress_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_addresses_lcaddress_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_addresses_post(
self, method, url, body, headers
):
body = self.fixtures.load("operations_operation_global_addresses_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_addresses_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_addresses_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_subnetworks_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_subnetworks_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_forwardingRules_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_forwardingRules_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_forwardingRules_lcforwardingrule_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_forwardingRules_lcforwardingrule_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_deleteAccessConfig(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node_name_deleteAccessConfig_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_serialPort(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instances_node_name_getSerialOutput.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_addAccessConfig(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node_name_addAccessConfig_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_setMetadata_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_node_name_setMetadata_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_setLabels_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_node_name_setLabels_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_setImageLabels_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"global_operations_operation_setImageLabels_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_targetInstances_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_targetInstances_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_addAccessConfig_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node_name_addAccessConfig_done.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_deleteAccessConfig_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node_name_deleteAccessConfig_done.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_targetInstances_lctargetinstance_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_targetInstances_lctargetinstance_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lctargetpool_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lctargetpool_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lctargetpool_removeHealthCheck_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lctargetpool_addHealthCheck_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lctargetpool_removeInstance_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lctargetpool_removeInstance_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lb_pool_setBackup_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lb_pool_setBackup_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_operations_operation_regions_us_central1_targetPools_lctargetpool_addInstance_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_regions_us-central1_targetPools_lctargetpool_addInstance_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_lcdisk_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_disks_lcdisk_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_setDiskAutoDelete(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_instances_node_name_setDiskAutoDelete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_volume_auto_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us_central1_a_operations_operation_volume_auto_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_lcdisk_createSnapshot_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_disks_lcdisk_createSnapshot_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_lcdisk_resize_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_disks_lcdisk_resize_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_lcdisk_setLabels_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_disks_lcdisk_setLabels_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_disks_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_lcnode_000_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_lcnode-000_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_lcnode_001_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_lcnode-001_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_delete(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node-name_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_attachDisk_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node-name_attachDisk_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_detachDisk_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node-name_detachDisk_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_setTags_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node-name_setTags_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_reset_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_node-name_reset_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_operations_operation_zones_europe_west1_a_instances_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_europe-west1-a_instances_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_zones_us-central1-a_instances_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _project(self, method, url, body, headers):
body = self.fixtures.load("project.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_windows_cloud_global_licenses_windows_server_2008_r2_dc(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_windows-cloud_global_licenses_windows_server_2008_r2_dc.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_suse_cloud_global_licenses_sles_11(self, method, url, body, headers):
body = self.fixtures.load("projects_suse-cloud_global_licenses_sles_11.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_rhel_cloud_global_licenses_rhel_7_server(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_rhel-cloud_global_licenses_rhel_server.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_coreos_cloud_global_licenses_coreos_stable(
self, method, url, body, headers
):
body = self.fixtures.load(
"projects_coreos-cloud_global_licenses_coreos_stable.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_suse_cloud_global_licenses_sles_12(self, method, url, body, headers):
body = self.fixtures.load("projects_suse-cloud_global_licenses_sles_12.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_windows_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_windows-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_windows_sql_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_windows-sql-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_rhel_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_rhel-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_coreos_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_coreos-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_coreos_cloud_global_images_family_coreos_beta(
self, method, url, body, header
):
body = self.fixtures.load(
"projects_coreos-cloud_global_images_family_coreos_beta.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_coreos_cloud_global_images_family_coreos_stable(
self, method, url, body, header
):
body = self.fixtures.load(
"projects_coreos-cloud_global_images_family_coreos_stable.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_cos_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_cos-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_opensuse_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_opensuse-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_ubuntu_os_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_ubuntu-os-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_centos_cloud_global_images(self, method, url, body, header):
body = self.fixtures.load("projects_centos-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_suse_cloud_global_images(self, method, url, body, headers):
body = self.fixtures.load("projects_suse-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_suse_byos_cloud_global_images(self, method, url, body, headers):
body = self.fixtures.load("projects_suse-byos-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_suse_sap_cloud_global_images(self, method, url, body, headers):
body = self.fixtures.load("projects_suse-sap-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _projects_debian_cloud_global_images(self, method, url, body, headers):
body = self.fixtures.load("projects_debian-cloud_global_images.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions(self, method, url, body, headers):
if "pageToken" in url or "filter" in url:
body = self.fixtures.load("regions-paged-2.json")
elif "maxResults" in url:
body = self.fixtures.load("regions-paged-1.json")
else:
body = self.fixtures.load("regions.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_addresses(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_addresses_post.json")
else:
body = self.fixtures.load("global_addresses.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_europe_west1(self, method, url, body, headers):
body = self.fixtures.load("regions_europe-west1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_asia_east1(self, method, url, body, headers):
body = self.fixtures.load("regions_asia-east1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1(self, method, url, body, headers):
body = self.fixtures.load("regions_us-central1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_east1(self, method, url, body, headers):
body = self.fixtures.load("regions_us-east1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_subnetworks(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("regions_us-central1_subnetworks_post.json")
else:
body = self.fixtures.load("regions_us-central1_subnetworks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_addresses(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("regions_us-central1_addresses_post.json")
else:
body = self.fixtures.load("regions_us-central1_addresses.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_addresses_lcaddressglobal(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("global_addresses_lcaddressglobal_delete.json")
else:
body = self.fixtures.load("global_addresses_lcaddressglobal.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_addresses_lcaddress(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"regions_us-central1_addresses_lcaddress_delete.json"
)
else:
body = self.fixtures.load("regions_us-central1_addresses_lcaddress.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_addresses_testaddress(self, method, url, body, headers):
body = self.fixtures.load("regions_us-central1_addresses_testaddress.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_subnetworks_subnet_1(self, method, url, body, headers):
body = self.fixtures.load("regions_us-central1_subnetworks_subnet_1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_addresses_lcaddressinternal(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_addresses_lcaddressinternal.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_forwardingRules(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("regions_us-central1_forwardingRules_post.json")
else:
body = self.fixtures.load("regions_us-central1_forwardingRules.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_forwardingRules_libcloud_lb_demo_lb(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_forwardingRules_libcloud-lb-demo-lb.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_forwardingRules_lcforwardingrule(
self, method, url, body, headers
):
if method == "DELETE":
body = self.fixtures.load(
"regions_us-central1_forwardingRules_lcforwardingrule_delete.json"
)
else:
body = self.fixtures.load(
"regions_us-central1_forwardingRules_lcforwardingrule.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_targetInstances(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("zones_us-central1-a_targetInstances_post.json")
else:
body = self.fixtures.load("zones_us-central1-a_targetInstances.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("regions_us-central1_targetPools_post.json")
else:
body = self.fixtures.load("regions_us-central1_targetPools.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_targetInstances_lctargetinstance(
self, method, url, body, headers
):
if method == "DELETE":
body = self.fixtures.load(
"zones_us-central1-a_targetInstances_lctargetinstance_delete.json"
)
else:
body = self.fixtures.load(
"zones_us-central1-a_targetInstances_lctargetinstance.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lb_pool_getHealth(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lb_pool_getHealth.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lb_pool(self, method, url, body, headers):
body = self.fixtures.load("regions_us-central1_targetPools_lb_pool.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_delete.json"
)
else:
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool_sticky(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_sticky.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_backup_pool(self, method, url, body, headers):
body = self.fixtures.load("regions_us-central1_targetPools_backup_pool.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_libcloud_lb_demo_lb_tp(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_libcloud-lb-demo-lb-tp.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool_removeHealthCheck(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool_addHealthCheck(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool_removeInstance(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_removeInstance_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lb_pool_setBackup(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lb_pool_setBackup_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _regions_us_central1_targetPools_lctargetpool_addInstance(
self, method, url, body, headers
):
body = self.fixtures.load(
"regions_us-central1_targetPools_lctargetpool_addInstance_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones(self, method, url, body, headers):
body = self.fixtures.load("zones.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_asia_east_1a(self, method, url, body, headers):
body = self.fixtures.load("zones_asia-east1-a.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_asia_east1_b(self, method, url, body, headers):
body = self.fixtures.load("zones_asia-east1-b.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_east1_b(self, method, url, body, headers):
body = self.fixtures.load("zones_us-east1-b.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_diskTypes(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_diskTypes.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_diskTypes_pd_standard(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_diskTypes_pd_standard.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_diskTypes_pd_ssd(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_diskTypes_pd_ssd.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("zones_us-central1-a_disks_post.json")
else:
body = self.fixtures.load("zones_us-central1-a_disks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcdisk(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load("zones_us-central1-a_disks_lcdisk_delete.json")
else:
body = self.fixtures.load("zones_us-central1-a_disks_lcdisk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcdisk_createSnapshot(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_disks_lcdisk_createSnapshot_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcdisk_resize(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_disks_lcdisk_resize_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcdisk_setLabels(self, method, url, body, header):
body = self.fixtures.load("zones_us-central1-a_disks_lcdisk_setLabel_post.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_node_name(self, method, url, body, headers):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcnode_000(self, method, url, body, headers):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_disks_lcnode_001(self, method, url, body, headers):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_disks_libcloud_lb_demo_www_000(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_disks_libcloud_lb_demo_www_001(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_disks_libcloud_lb_demo_www_002(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central2_a_disks_libcloud_demo_boot_disk(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central2_a_disks_libcloud_demo_np_node(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central2_a_disks_libcloud_demo_multiple_nodes_000(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central2_a_disks_libcloud_demo_multiple_nodes_001(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_disks(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("zones_us-central1-a_disks_post.json")
else:
body = self.fixtures.load("zones_us-central1-a_disks.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_disks_libcloud_demo_europe_np_node(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_disks_libcloud_demo_europe_boot_disk(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_disks_libcloud_demo_europe_multiple_nodes_000(
self, method, url, body, headers
):
body = self.fixtures.load("generic_disk.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_instances(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("zones_europe-west1-a_instances_post.json")
else:
body = self.fixtures.load("zones_europe-west1-a_instances.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instances(self, method, url, body, headers):
if method == "GET":
body = "{}"
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_diskTypes_pd_standard(self, method, url, body, headers):
body = self.fixtures.load("zones_europe-west1-a_diskTypes_pd_standard.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("zones_us-central1-a_instances_post.json")
else:
body = self.fixtures.load("zones_us-central1-a_instances.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_sn_node_name(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_instances_sn-node-name.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"zones_us-central1-a_instances_node-name_delete.json"
)
else:
body = self.fixtures.load("zones_us-central1-a_instances_node-name.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_attachDisk(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instances_node-name_attachDisk_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_detachDisk(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instances_node-name_detachDisk_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_setTags(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instances_node-name_setTags_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_node_name_reset(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instances_node-name_reset_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_lcnode_000(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"zones_us-central1-a_instances_lcnode-000_delete.json"
)
else:
body = self.fixtures.load("zones_us-central1-a_instances_lcnode-000.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instances_lcnode_001(self, method, url, body, headers):
if method == "DELETE":
body = self.fixtures.load(
"zones_us-central1-a_instances_lcnode-001_delete.json"
)
else:
body = self.fixtures.load("zones_us-central1-a_instances_lcnode-001.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instances_libcloud_lb_nopubip_001(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instances_libcloud-lb-nopubip-001.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instances_libcloud_lb_demo_www_000(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instances_libcloud-lb-demo-www-000.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instances_libcloud_lb_demo_www_001(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instances_libcloud-lb-demo-www-001.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instances_libcloud_lb_demo_www_002(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instances_libcloud-lb-demo-www-002.json"
)
return (
httplib.NOT_FOUND,
body,
self.json_hdr,
httplib.responses[httplib.NOT_FOUND],
)
def _zones_us_central1_a(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_machineTypes(self, method, url, body, headers):
body = self.fixtures.load("zones_us-central1-a_machineTypes.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_europe_west1_a_machineTypes_n1_standard_1(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_europe-west1-a_machineTypes_n1-standard-1.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_machineTypes_n1_standard_1(
self, method, url, body, headers
):
body = self.fixtures.load("zones_us-central1-a_machineTypes_n1-standard-1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myinstancegroup(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instanceGroup_myinstancegroup.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myinstancegroup2(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instanceGroup_myinstancegroup2.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instanceGroups_myinstancegroup(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instanceGroup_myinstancegroup.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_east1_b_instanceGroups_myinstancegroup(
self, method, url, body, headers
):
body = self.fixtures.load("zones_us-east1-b_instanceGroup_myinstancegroup.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myinstancegroup_shared_network(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instanceGroup_myinstancegroup_shared_network.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroupManagers_myinstancegroup(
self, method, url, body, headers
):
if method == "PATCH":
# test_ex_instancegroupmanager_set_autohealing_policies
body = self.fixtures.load(
"zones_us-central1-a_operations_operation_zones_us-central1-a_instanceGroupManagers_insert_post.json"
)
else:
body = self.fixtures.load(
"zones_us-central1-a_instanceGroupManagers_myinstancegroup.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroupManagers_myinstancegroup_shared_network(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_instanceGroupManagers_myinstancegroup_shared_network.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_b_instanceGroupManagers_myinstancegroup(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-b_instanceGroupManagers_myinstancegroup.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroupManagers_myinstancegroup_listManagedInstances(
self, method, url, body, headers
):
body = self.fixtures.load(
"_zones_us_central1_a_instanceGroupManagers_myinstancegroup_listManagedInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_east1_b_instanceGroupManagers(self, method, url, body, headers):
body = self.fixtures.load("zones_us-east1-b_instanceGroupManagers.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroupManagers(self, method, url, body, headers):
# do an insert. Returns an operations link, which then
# returns the MIG URI.
if method == "POST":
body = self.fixtures.load(
"zones_us-central1-a_instanceGroupManagers_insert.json"
)
else:
body = self.fixtures.load("zones_us-central1-a_instanceGroupManagers.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroupManagers_insert_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"zones_us-central1-a_operations_operation_zones_us-central1-a_instanceGroupManagers_insert_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_instanceTemplates(self, method, url, body, headers):
if method == "POST":
# insert
body = self.fixtures.load("global_instanceTemplates_insert.json")
else:
# get or list call
body = self.fixtures.load("global_instanceTemplates.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_instanceTemplates_my_instance_template1_insert(
self, method, url, body, headers
):
"""Redirects from _global_instanceTemplates"""
body = self.fixtures.load(
"operations_operation_global_instanceTemplates_insert.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_instanceTemplates_my_instance_template1(
self, method, url, body, headers
):
body = self.fixtures.load("global_instanceTemplates_my_instance_template1.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_instanceTemplates_my_instance_template_shared_network(
self, method, url, body, headers
):
body = self.fixtures.load(
"global_instanceTemplates_my_instance_template_shared_network.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _aggregated_autoscalers(self, method, url, body, headers):
body = self.fixtures.load("aggregated_autoscalers.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_sslCertificates(self, method, url, body, headers):
if method == "POST":
body = self.fixtures.load("global_sslcertificates_post.json")
else:
body = self.fixtures.load("global_sslcertificates.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_sslCertificates_example(self, method, url, body, headers):
body = self.fixtures.load("global_sslcertificates_example.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _global_operations_operation_global_sslcertificates_post(
self, method, url, body, headers
):
body = self.fixtures.load(
"operations_operation_global_sslcertificates_post.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myname(self, method, url, body, headers):
if method == "DELETE":
# delete
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_myname_delete.json"
)
else:
# get or list call
body = self.fixtures.load("zones_us_central1_a_instanceGroups_myname.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroups_myname_delete(
self, method, url, body, headers
):
"""Redirects from _zones_us_central1_a_instanceGroups_myname"""
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_instanceGroups_myname_delete.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups(self, method, url, body, headers):
if method == "POST":
# insert
body = self.fixtures.load("zones_us_central1_a_instanceGroups_insert.json")
else:
# get or list call
body = self.fixtures.load("zones_us_central1_a_instanceGroups.json")
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_zone_attribute_not_present(
self, method, url, body, headers
):
if method == "GET":
# get or list call
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_zone_attribute_not_present.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroups_myname_insert(
self, method, url, body, headers
):
"""Redirects from _zones_us_central1_a_instanceGroups"""
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_instanceGroups_insert.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myname_listInstances(
self, method, url, body, headers
):
# POST
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_myname_listInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myname_addInstances(
self, method, url, body, headers
):
# POST
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_myname_addInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroups_myname_addInstances(
self, method, url, body, headers
):
"""Redirects from _zones_us_central1_a_instanceGroups_myname_addInstances"""
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_instanceGroups_myname_addInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myname_removeInstances(
self, method, url, body, headers
):
# POST
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_myname_removeInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroups_myname_removeInstances(
self, method, url, body, headers
):
"""Redirects from _zones_us_central1_a_instanceGroups_myname_removeInstances"""
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_instanceGroups_myname_removeInstances.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_instanceGroups_myname_setNamedPorts(
self, method, url, body, headers
):
# POST
body = self.fixtures.load(
"zones_us_central1_a_instanceGroups_myname_setNamedPorts.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
def _zones_us_central1_a_operations_operation_zones_us_central1_a_instanceGroups_myname_setNamedPorts(
self, method, url, body, headers
):
"""Redirects from _zones_us_central1_a_instanceGroups_myname_setNamedPorts"""
body = self.fixtures.load(
"operations_operation_zones_us_central1_a_instanceGroups_myname_setNamedPorts.json"
)
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
if __name__ == "__main__":
sys.exit(unittest.main())