fog 1.14.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Rakefile +2 -2
- data/changelog.txt +296 -0
- data/fog.gemspec +2 -2
- data/lib/fog/atmos/models/storage/file.rb +2 -2
- data/lib/fog/aws/compute.rb +42 -2
- data/lib/fog/aws/elb.rb +3 -0
- data/lib/fog/aws/elb/policy_types.rb +441 -430
- data/lib/fog/aws/models/auto_scaling/activities.rb +11 -3
- data/lib/fog/aws/models/auto_scaling/groups.rb +6 -3
- data/lib/fog/aws/models/auto_scaling/policies.rb +7 -3
- data/lib/fog/aws/models/compute/flavors.rb +19 -0
- data/lib/fog/aws/models/compute/volume.rb +1 -1
- data/lib/fog/aws/models/elb/backend_server_description.rb +11 -0
- data/lib/fog/aws/models/elb/backend_server_descriptions.rb +22 -0
- data/lib/fog/aws/models/elb/load_balancer.rb +15 -2
- data/lib/fog/aws/models/elb/policies.rb +28 -13
- data/lib/fog/aws/models/elb/policy.rb +20 -10
- data/lib/fog/aws/models/rds/instance_option.rb +21 -0
- data/lib/fog/aws/models/rds/instance_options.rb +30 -0
- data/lib/fog/aws/models/rds/server.rb +1 -0
- data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +5 -5
- data/lib/fog/aws/parsers/compute/describe_account_attributes.rb +42 -0
- data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +44 -13
- data/lib/fog/aws/parsers/rds/db_parser.rb +28 -6
- data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
- data/lib/fog/aws/rds.rb +5 -0
- data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +9 -1
- data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +15 -1
- data/lib/fog/aws/requests/compute/describe_account_attributes.rb +49 -0
- data/lib/fog/aws/requests/elb/create_app_cookie_stickiness_policy.rb +0 -2
- data/lib/fog/aws/requests/elb/create_lb_cookie_stickiness_policy.rb +0 -2
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +30 -9
- data/lib/fog/aws/requests/elb/create_load_balancer_policy.rb +11 -8
- data/lib/fog/aws/requests/elb/describe_load_balancers.rb +21 -1
- data/lib/fog/aws/requests/elb/set_load_balancer_policies_for_backend_server.rb +67 -0
- data/lib/fog/aws/requests/iam/upload_server_certificate.rb +1 -1
- data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
- data/lib/fog/aws/requests/ses/verify_domain_identity.rb +1 -1
- data/lib/fog/bin/rackspace.rb +4 -0
- data/lib/fog/brightbox/models/compute/collaboration.rb +10 -2
- data/lib/fog/brightbox/models/compute/collaborations.rb +26 -2
- data/lib/fog/brightbox/models/compute/user_collaboration.rb +16 -1
- data/lib/fog/brightbox/models/compute/user_collaborations.rb +10 -2
- data/lib/fog/cloudstack/models/compute/server.rb +4 -0
- data/lib/fog/cloudstack/models/compute/servers.rb +1 -1
- data/lib/fog/compute/models/server.rb +16 -10
- data/lib/fog/core.rb +1 -0
- data/lib/fog/core/collection.rb +18 -0
- data/lib/fog/core/credentials.rb +6 -1
- data/lib/fog/core/mock.rb +16 -0
- data/lib/fog/digitalocean/compute.rb +32 -3
- data/lib/fog/digitalocean/models/compute/server.rb +43 -14
- data/lib/fog/digitalocean/models/compute/servers.rb +27 -4
- data/lib/fog/digitalocean/models/compute/ssh_keys.rb +2 -3
- data/lib/fog/digitalocean/requests/compute/create_server.rb +9 -7
- data/lib/fog/digitalocean/requests/compute/destroy_server.rb +3 -0
- data/lib/fog/digitalocean/requests/compute/list_images.rb +6 -6
- data/lib/fog/dnsimple/dns.rb +4 -1
- data/lib/fog/dnsimple/models/dns/record.rb +3 -3
- data/lib/fog/dnsimple/requests/dns/create_domain.rb +36 -0
- data/lib/fog/dnsimple/requests/dns/create_record.rb +27 -0
- data/lib/fog/dnsimple/requests/dns/delete_domain.rb +12 -0
- data/lib/fog/dnsimple/requests/dns/delete_record.rb +12 -0
- data/lib/fog/dnsimple/requests/dns/get_domain.rb +12 -0
- data/lib/fog/dnsimple/requests/dns/get_record.rb +24 -0
- data/lib/fog/dnsimple/requests/dns/list_domains.rb +12 -0
- data/lib/fog/dnsimple/requests/dns/list_records.rb +12 -0
- data/lib/fog/dnsimple/requests/dns/update_record.rb +20 -0
- data/lib/fog/glesys/models/compute/server.rb +6 -0
- data/lib/fog/google/README.md +28 -0
- data/lib/fog/google/Rakefile +17 -0
- data/lib/fog/google/compute.rb +5 -0
- data/lib/fog/google/examples/bootstrap.rb +9 -0
- data/lib/fog/google/examples/create.rb +37 -0
- data/lib/fog/google/examples/eric-fail.rb +19 -0
- data/lib/fog/google/examples/get_list_images.rb +27 -0
- data/lib/fog/google/examples/get_list_snapshots.rb +20 -0
- data/lib/fog/google/examples/image_create.rb +18 -0
- data/lib/fog/google/examples/launch_micro_instance.rb +26 -0
- data/lib/fog/google/examples/metadata.rb +18 -0
- data/lib/fog/google/examples/network.rb +21 -0
- data/lib/fog/google/models/compute/disk.rb +16 -5
- data/lib/fog/google/models/compute/disks.rb +16 -6
- data/lib/fog/google/models/compute/flavors.rb +2 -1
- data/lib/fog/google/models/compute/image.rb +36 -18
- data/lib/fog/google/models/compute/images.rb +38 -5
- data/lib/fog/google/models/compute/server.rb +20 -6
- data/lib/fog/google/models/compute/servers.rb +8 -5
- data/lib/fog/google/models/compute/snapshot.rb +36 -0
- data/lib/fog/google/models/compute/snapshots.rb +28 -0
- data/lib/fog/google/models/storage/file.rb +7 -1
- data/lib/fog/google/parsers/storage/access_control_list.rb +2 -2
- data/lib/fog/google/requests/compute/delete_disk.rb +5 -1
- data/lib/fog/google/requests/compute/get_disk.rb +2 -1
- data/lib/fog/google/requests/compute/get_snapshot.rb +34 -0
- data/lib/fog/google/requests/compute/insert_disk.rb +23 -7
- data/lib/fog/google/requests/compute/insert_image.rb +16 -9
- data/lib/fog/google/requests/compute/insert_server.rb +22 -10
- data/lib/fog/google/requests/compute/list_disks.rb +1 -1
- data/lib/fog/google/requests/compute/list_images.rb +3 -2
- data/lib/fog/google/requests/compute/list_snapshots.rb +30 -0
- data/lib/fog/openstack.rb +11 -2
- data/lib/fog/openstack/network.rb +23 -0
- data/lib/fog/openstack/requests/compute/add_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_volume.rb +8 -7
- data/lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/compute/remove_flavor_access.rb +1 -1
- data/lib/fog/openstack/requests/image/create_image.rb +23 -23
- data/lib/fog/openstack/requests/image/update_image.rb +31 -33
- data/lib/fog/openstack/requests/network/delete_quota.rb +26 -0
- data/lib/fog/openstack/requests/network/get_quota.rb +31 -0
- data/lib/fog/openstack/requests/network/get_quotas.rb +31 -0
- data/lib/fog/openstack/requests/network/update_quota.rb +33 -0
- data/lib/fog/openstack/requests/storage/get_object_https_url.rb +3 -3
- data/lib/fog/openstack/requests/storage/post_set_meta_temp_url_key.rb +1 -1
- data/lib/fog/openstack/requests/storage/put_object.rb +8 -5
- data/lib/fog/openstack/storage.rb +10 -9
- data/lib/fog/rackspace.rb +15 -5
- data/lib/fog/rackspace/block_storage.rb +8 -4
- data/lib/fog/rackspace/cdn.rb +21 -4
- data/lib/fog/rackspace/compute.rb +4 -4
- data/lib/fog/rackspace/compute_v2.rb +15 -4
- data/lib/fog/rackspace/databases.rb +4 -4
- data/lib/fog/rackspace/dns.rb +6 -6
- data/lib/fog/rackspace/errors.rb +12 -5
- data/lib/fog/rackspace/load_balancers.rb +4 -4
- data/lib/fog/rackspace/mock_data.rb +18 -7
- data/lib/fog/rackspace/models/compute_v2/key_pair.rb +56 -0
- data/lib/fog/rackspace/models/compute_v2/key_pairs.rb +43 -0
- data/lib/fog/rackspace/models/compute_v2/server.rb +7 -2
- data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -1
- data/lib/fog/rackspace/models/identity/service_catalog.rb +34 -16
- data/lib/fog/rackspace/models/monitoring/agent_token.rb +40 -0
- data/lib/fog/rackspace/models/monitoring/agent_tokens.rb +28 -0
- data/lib/fog/rackspace/models/monitoring/alarm.rb +59 -0
- data/lib/fog/rackspace/models/monitoring/alarm_example.rb +26 -0
- data/lib/fog/rackspace/models/monitoring/alarm_examples.rb +31 -0
- data/lib/fog/rackspace/models/monitoring/alarms.rb +40 -0
- data/lib/fog/rackspace/models/monitoring/base.rb +30 -0
- data/lib/fog/rackspace/models/monitoring/check.rb +75 -0
- data/lib/fog/rackspace/models/monitoring/check_type.rb +15 -0
- data/lib/fog/rackspace/models/monitoring/check_types.rb +23 -0
- data/lib/fog/rackspace/models/monitoring/checks.rb +40 -0
- data/lib/fog/rackspace/models/monitoring/data_point.rb +18 -0
- data/lib/fog/rackspace/models/monitoring/data_points.rb +49 -0
- data/lib/fog/rackspace/models/monitoring/entities.rb +48 -0
- data/lib/fog/rackspace/models/monitoring/entity.rb +64 -0
- data/lib/fog/rackspace/models/monitoring/metric.rb +25 -0
- data/lib/fog/rackspace/models/monitoring/metrics.rb +27 -0
- data/lib/fog/rackspace/monitoring.rb +153 -0
- data/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +53 -0
- data/lib/fog/rackspace/requests/compute_v2/create_server.rb +10 -8
- data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +36 -0
- data/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +41 -0
- data/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb +37 -0
- data/lib/fog/rackspace/requests/monitoring/create_agent_token.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/create_alarm.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/create_check.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/create_entity.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/delete_agent_token.rb +17 -0
- data/lib/fog/rackspace/requests/monitoring/delete_alarm.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/delete_check.rb +17 -0
- data/lib/fog/rackspace/requests/monitoring/delete_entity.rb +17 -0
- data/lib/fog/rackspace/requests/monitoring/evaluate_alarm_example.rb +21 -0
- data/lib/fog/rackspace/requests/monitoring/get_agent_token.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/get_alarm.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/get_alarm_example.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/get_check.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/get_entity.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/list_agent_tokens.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/list_alarm_examples.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_alarms.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_check_types.rb +17 -0
- data/lib/fog/rackspace/requests/monitoring/list_checks.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_data_points.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_entities.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/list_metrics.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_notification_plans.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/list_overview.rb +19 -0
- data/lib/fog/rackspace/requests/monitoring/update_alarm.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/update_check.rb +18 -0
- data/lib/fog/rackspace/requests/monitoring/update_entity.rb +18 -0
- data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
- data/lib/fog/rackspace/storage.rb +8 -4
- data/lib/fog/vcloud/compute.rb +1 -1
- data/lib/fog/vcloud/examples/README.md +54 -0
- data/lib/fog/vcloud/examples/creating_a_connection.md +20 -0
- data/lib/fog/vcloud/examples/creating_a_vapp.md +17 -0
- data/lib/fog/vcloud/examples/get_network_information.md +10 -0
- data/lib/fog/vcloud/examples/get_vapp_information.md +10 -0
- data/lib/fog/vcloud/examples/more_on_vapps.md +23 -0
- data/lib/fog/vcloud/requests/compute/configure_vm.rb +2 -2
- data/lib/fog/version.rb +1 -1
- data/lib/fog/vsphere/compute.rb +131 -0
- data/lib/fog/vsphere/models/compute/server.rb +5 -1
- data/lib/fog/vsphere/requests/compute/get_datacenter.rb +3 -1
- data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +21 -37
- data/lib/fog/vsphere/requests/compute/list_datacenters.rb +1 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +8 -114
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +18 -9
- data/lib/fog/vsphere/requests/compute/vm_power_off.rb +2 -0
- data/lib/fog/xenserver/compute.rb +14 -12
- data/lib/fog/xenserver/models/compute/console.rb +27 -0
- data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
- data/lib/fog/xenserver/models/compute/server.rb +6 -2
- data/lib/fog/xenserver/models/compute/servers.rb +5 -0
- data/lib/fog/xenserver/requests/compute/create_server.rb +4 -0
- data/lib/fog/xml/sax_parser_connection.rb +3 -0
- data/lib/tasks/changelog_task.rb +1 -0
- data/tests/aws/models/compute/volume_tests.rb +1 -1
- data/tests/aws/models/elb/model_tests.rb +33 -1
- data/tests/aws/models/rds/instance_option_tests.rb +14 -0
- data/tests/aws/parsers/elb/describe_load_balancers.rb +65 -0
- data/tests/aws/requests/compute/client_tests.rb +25 -0
- data/tests/aws/requests/elb/helper.rb +2 -1
- data/tests/aws/requests/elb/listener_tests.rb +1 -1
- data/tests/aws/requests/elb/load_balancer_tests.rb +5 -1
- data/tests/aws/requests/elb/policy_tests.rb +85 -6
- data/tests/aws/requests/iam/helper.rb +4 -1
- data/tests/aws/requests/iam/server_certificate_tests.rb +2 -2
- data/tests/aws/requests/rds/helper.rb +22 -0
- data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
- data/tests/core/credential_tests.rb +21 -0
- data/tests/core/mocking_tests.rb +15 -0
- data/tests/core/service_tests.rb +26 -0
- data/tests/digitalocean/helper.rb +23 -16
- data/tests/digitalocean/models/compute/flavor_tests.rb +2 -2
- data/tests/digitalocean/models/compute/image_tests.rb +2 -2
- data/tests/digitalocean/models/compute/region_tests.rb +2 -2
- data/tests/digitalocean/models/compute/server_tests.rb +11 -3
- data/tests/digitalocean/models/compute/servers_tests.rb +14 -28
- data/tests/digitalocean/models/compute/ssh_key_tests.rb +7 -3
- data/tests/digitalocean/models/compute/ssh_keys_tests.rb +5 -1
- data/tests/digitalocean/requests/compute/create_server_tests.rb +3 -6
- data/tests/digitalocean/requests/compute/destroy_server_tests.rb +1 -2
- data/tests/digitalocean/requests/compute/get_server_details_tests.rb +1 -1
- data/tests/digitalocean/requests/compute/get_ssh_key_tests.rb +4 -1
- data/tests/digitalocean/requests/compute/list_ssh_keys_tests.rb +5 -2
- data/tests/dnsimple/requests/dns/dns_tests.rb +30 -26
- data/tests/helper.rb +2 -2
- data/tests/helpers/collection_helper.rb +4 -4
- data/tests/helpers/mock_helper.rb +2 -0
- data/tests/openstack/authenticate_tests.rb +22 -0
- data/tests/openstack/requests/compute/flavor_tests.rb +27 -12
- data/tests/openstack/requests/compute/volume_tests.rb +10 -12
- data/tests/openstack/requests/image/image_tests.rb +30 -15
- data/tests/openstack/requests/network/quota_tests.rb +65 -0
- data/tests/openstack/requests/storage/object_tests.rb +27 -2
- data/tests/rackspace/block_storage_tests.rb +2 -1
- data/tests/rackspace/cdn_tests.rb +9 -0
- data/tests/rackspace/compute_v2_tests.rb +16 -15
- data/tests/rackspace/databases_tests.rb +1 -1
- data/tests/rackspace/load_balancer_tests.rb +1 -1
- data/tests/rackspace/models/compute_v2/keypairs_tests.rb +47 -0
- data/tests/rackspace/models/identity/service_catalog_tests.rb +54 -29
- data/tests/rackspace/models/monitoring/agent_token_tests.rb +9 -0
- data/tests/rackspace/models/monitoring/agent_tokens_tests.rb +9 -0
- data/tests/rackspace/models/monitoring/alarm_example_tests.rb +18 -0
- data/tests/rackspace/models/monitoring/alarm_examples_tests.rb +19 -0
- data/tests/rackspace/models/monitoring/alarm_tests.rb +56 -0
- data/tests/rackspace/models/monitoring/alarms_tests.rb +25 -0
- data/tests/rackspace/models/monitoring/check_tests.rb +50 -0
- data/tests/rackspace/models/monitoring/check_types_tests.rb +14 -0
- data/tests/rackspace/models/monitoring/checks_tests.rb +16 -0
- data/tests/rackspace/models/monitoring/data_points_tests.rb +19 -0
- data/tests/rackspace/models/monitoring/entities_tests.rb +14 -0
- data/tests/rackspace/models/monitoring/entity_tests.rb +26 -0
- data/tests/rackspace/models/monitoring/metric_tests.rb +19 -0
- data/tests/rackspace/models/monitoring/metrics_tests.rb +17 -0
- data/tests/rackspace/monitoring_tests.rb +72 -0
- data/tests/rackspace/requests/compute_v2/keypair_tests.rb +55 -0
- data/tests/rackspace/requests/monitoring/agent_tests.rb +34 -0
- data/tests/rackspace/requests/monitoring/alarm_example_tests.rb +30 -0
- data/tests/rackspace/requests/monitoring/alarm_tests.rb +55 -0
- data/tests/rackspace/requests/monitoring/check_tests.rb +40 -0
- data/tests/rackspace/requests/monitoring/entity_tests.rb +37 -0
- data/tests/rackspace/requests/monitoring/helper.rb +78 -0
- data/tests/rackspace/requests/monitoring/list_tests.rb +60 -0
- data/tests/vsphere/models/compute/server_tests.rb +1 -1
- data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +2 -2
- data/tests/vsphere/requests/compute/vm_clone_tests.rb +14 -8
- data/tests/xenserver/compute_tests.rb +5 -5
- data/tests/xenserver/models/compute/console_test.rb +35 -0
- data/tests/xenserver/models/compute/consoles_test.rb +19 -0
- data/tests/xenserver/models/compute/server_tests.rb +25 -18
- data/tests/xenserver/models/compute/servers_tests.rb +1 -0
- metadata +154 -3
@@ -27,6 +27,18 @@ module Fog
|
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
30
|
+
|
31
|
+
class Mock
|
32
|
+
|
33
|
+
def list_records(domain)
|
34
|
+
response = Excon::Response.new
|
35
|
+
response.status = 200
|
36
|
+
response.body = self.data[:records][domain] || []
|
37
|
+
response
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
@@ -37,6 +37,26 @@ module Fog
|
|
37
37
|
end
|
38
38
|
|
39
39
|
end
|
40
|
+
|
41
|
+
class Mock
|
42
|
+
|
43
|
+
def update_record(domain, record_id, options)
|
44
|
+
record = self.data[:records][domain].detect { |record| record["record"]["id"] == record_id }
|
45
|
+
response = Excon::Response.new
|
46
|
+
|
47
|
+
if record.nil?
|
48
|
+
response.status = 400
|
49
|
+
else
|
50
|
+
response.status = 200
|
51
|
+
record["record"].merge!(options)
|
52
|
+
record["record"]["updated_at"] = Time.now.iso8601
|
53
|
+
response.body = record
|
54
|
+
end
|
55
|
+
|
56
|
+
response
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
40
60
|
end
|
41
61
|
end
|
42
62
|
end
|
@@ -67,6 +67,12 @@ module Fog
|
|
67
67
|
:rootpassword => rootpassword,
|
68
68
|
:transfer => transfer || "500",
|
69
69
|
}
|
70
|
+
|
71
|
+
# optional options when creating a server:
|
72
|
+
[:ip, :ipv6, :description].each do |k|
|
73
|
+
options[k] = attributes[k] if attributes[k]
|
74
|
+
end
|
75
|
+
|
70
76
|
data = service.create(options)
|
71
77
|
merge_attributes(data.body['response']['server'])
|
72
78
|
data.status == 200 ? true : false
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Fog with Google
|
2
|
+
|
3
|
+
Fog currently supports two Google Cloud services: [Google Compute Engine](https://developers.google.com/compute/) and [Google Cloud Storage](https://developers.google.com/storage/). The main maintainer for the Google sections is @icco.
|
4
|
+
|
5
|
+
## Storage
|
6
|
+
|
7
|
+
Google Cloud Storage originally was very similar to Amazon's S3. Because of this, Fog implements the [XML GCS API](https://developers.google.com/storage/docs/xml-api-overview). We eventually want to move to the new [JSON API](https://developers.google.com/storage/docs/json_api/), once it has similar performance characteristics to the XML API. If this migration interests you, send us a pull request!
|
8
|
+
|
9
|
+
## Compute
|
10
|
+
|
11
|
+
Google Compute Engine is a Virtual Machine hosting service. Currently it is built on version [v1beta15](https://developers.google.com/compute/docs/reference/v1beta15/) of the GCE API.
|
12
|
+
|
13
|
+
Our implementation of the API currently supports
|
14
|
+
|
15
|
+
* Server creation, deletion and bootstrapping
|
16
|
+
* All server "flavors" (micro and normal)
|
17
|
+
* Persistent Disk creation and deletion
|
18
|
+
* Image lookup
|
19
|
+
|
20
|
+
Features we are looking forward to implementing in the future:
|
21
|
+
|
22
|
+
* Network and Firewall configuration
|
23
|
+
* Global Metadata support
|
24
|
+
* Image creation
|
25
|
+
|
26
|
+
v1beta15 is still in beta, so we can imagine lots of changes to the API. If you are using Fog to interact with GCE, please keep Fog up to date and [file issues](https://github.com/fog/fog/issues?labels=google) for any anomalies you see.
|
27
|
+
|
28
|
+
Thanks!
|
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace :google do
|
2
|
+
namespace :smoke do
|
3
|
+
|
4
|
+
desc "Smoke tests for Google Compute Engine."
|
5
|
+
task :compute do
|
6
|
+
require 'fog'
|
7
|
+
|
8
|
+
puts "These smoke tests assume you have a file at ~/.fog which has your credentials for connecting to GCE."
|
9
|
+
|
10
|
+
Dir.glob("./examples/*.rb").each do |file|
|
11
|
+
puts "Running #{file}:"
|
12
|
+
require file
|
13
|
+
test()
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/fog/google/compute.rb
CHANGED
@@ -19,6 +19,7 @@ module Fog
|
|
19
19
|
request :list_zones
|
20
20
|
request :list_global_operations
|
21
21
|
request :list_zone_operations
|
22
|
+
request :list_snapshots
|
22
23
|
|
23
24
|
request :get_server
|
24
25
|
request :get_disk
|
@@ -27,6 +28,7 @@ module Fog
|
|
27
28
|
request :get_machine_type
|
28
29
|
request :get_network
|
29
30
|
request :get_zone
|
31
|
+
request :get_snapshot
|
30
32
|
|
31
33
|
request :delete_disk
|
32
34
|
request :delete_firewall
|
@@ -56,6 +58,9 @@ module Fog
|
|
56
58
|
model :disk
|
57
59
|
collection :disks
|
58
60
|
|
61
|
+
model :snapshot
|
62
|
+
collection :snapshots
|
63
|
+
|
59
64
|
class Mock
|
60
65
|
include Collections
|
61
66
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
server = connection.servers.bootstrap
|
5
|
+
server.wait_for { sshable? }
|
6
|
+
|
7
|
+
raise "Could not bootstrap sshable server." unless server.ssh("whoami")
|
8
|
+
raise "Cloud note delete server." unless server.destroy
|
9
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
server = connection.servers.create(defaults = {
|
5
|
+
:name => "fog-smoke-test-#{Time.now.to_i}",
|
6
|
+
:image_name => "debian-7-wheezy-v20130522",
|
7
|
+
:machine_type => "n1-standard-1",
|
8
|
+
:zone_name => "us-central1-a",
|
9
|
+
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
|
10
|
+
:public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
|
11
|
+
:user => ENV['USER'],
|
12
|
+
})
|
13
|
+
|
14
|
+
# My own wait_for because it hides errors
|
15
|
+
duration = 0
|
16
|
+
interval = 5
|
17
|
+
timeout = 600
|
18
|
+
start = Time.now
|
19
|
+
until server.sshable? || duration > timeout
|
20
|
+
# puts duration
|
21
|
+
# puts " ----- "
|
22
|
+
|
23
|
+
server.reload
|
24
|
+
|
25
|
+
# p "ready?: #{server.ready?}"
|
26
|
+
# p "public_ip_address: #{server.public_ip_address.inspect}"
|
27
|
+
# p "public_key: #{server.public_key.inspect}"
|
28
|
+
# p "metadata: #{server.metadata.inspect}"
|
29
|
+
# p "sshable?: #{server.sshable?}"
|
30
|
+
|
31
|
+
sleep(interval.to_f)
|
32
|
+
duration = Time.now - start
|
33
|
+
end
|
34
|
+
|
35
|
+
raise "Could not bootstrap sshable server." unless server.ssh("whoami")
|
36
|
+
raise "Cloud note delete server." unless server.destroy
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
server = connection.servers.create(defaults = {
|
5
|
+
:name => "fog-smoke-test-#{Time.now.to_i}",
|
6
|
+
:image_name => "debian-7-wheezy-v20130617",
|
7
|
+
:machine_type => "n1-standard-1",
|
8
|
+
:zone_name => "us-central1-a",
|
9
|
+
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
|
10
|
+
:public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
|
11
|
+
:username => 'root',
|
12
|
+
:metadata => {'foo' => 'bar'}
|
13
|
+
})
|
14
|
+
sleep(30)
|
15
|
+
|
16
|
+
raise "Could not reload created server." unless server.reload
|
17
|
+
raise "Could not create sshable server." unless server.ssh("whoami")
|
18
|
+
raise "Cloud note delete server." unless server.destroy
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
# puts 'Listing images in all projects...'
|
5
|
+
# puts '---------------------------------'
|
6
|
+
images = connection.images.all
|
7
|
+
raise 'Could not LIST the images' unless images
|
8
|
+
# puts images.inspect
|
9
|
+
|
10
|
+
# puts 'Fetching a single image from a global project...'
|
11
|
+
# puts '------------------------------------------------'
|
12
|
+
img = connection.images.get('debian-6-squeeze-v20130515')
|
13
|
+
raise 'Could not GET the image' unless img
|
14
|
+
# puts img.inspect
|
15
|
+
|
16
|
+
# First, get the name of an image that is in the users 'project' (not global)
|
17
|
+
custom_img_name = images.detect { |img| img.project == img.service.project }
|
18
|
+
# Run the next test only if there is a custom image available
|
19
|
+
if custom_img_name
|
20
|
+
# puts 'Fetching a single image from the custom project'
|
21
|
+
# puts '----------------------------------------------'
|
22
|
+
img = connection.images.get(custom_img_name)
|
23
|
+
raise 'Could not GET the (custom) image' unless img
|
24
|
+
# puts img.inspect
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
def test
|
2
|
+
|
3
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
4
|
+
|
5
|
+
# puts 'Listing snapshots...'
|
6
|
+
# puts '---------------------------------'
|
7
|
+
snapshots = connection.snapshots.all
|
8
|
+
raise 'Could not LIST the snapshots' unless snapshots
|
9
|
+
# puts snapshots.inspect
|
10
|
+
|
11
|
+
# puts 'Fetching a single snapshot...'
|
12
|
+
# puts '------------------------------------------------'
|
13
|
+
snap = snapshots.first
|
14
|
+
if !snap.nil?
|
15
|
+
snap = connection.snapshots.get(snap)
|
16
|
+
raise 'Could not GET the snapshot' unless snap
|
17
|
+
# puts snap.inspect
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
rawdisk = {
|
5
|
+
:source => nil, # 'http://some_valid_url_to_rootfs_tarball'
|
6
|
+
:container_type => 'TAR',
|
7
|
+
}
|
8
|
+
|
9
|
+
# Can't test this unless the 'source' points to a valid URL
|
10
|
+
return if rawdisk[:source].nil?
|
11
|
+
|
12
|
+
img = connection.image.create(:name => 'test-image',
|
13
|
+
:preferred_kernel => 'gce-v20130603',
|
14
|
+
:description => 'Test image (via fog)',
|
15
|
+
:raw_disk => rawdisk)
|
16
|
+
|
17
|
+
img.reload # will raise if image was not saved correctly
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
time = Time.now.utc.to_i
|
4
|
+
disk = connection.disks.create({
|
5
|
+
:name => 'foggydisk',
|
6
|
+
:size_gb => 10,
|
7
|
+
:zone_name => 'us-central1-a',
|
8
|
+
:source_image => 'centos-6-v20130522',
|
9
|
+
})
|
10
|
+
|
11
|
+
disk.wait_for { disk.ready? }
|
12
|
+
params = {
|
13
|
+
:name => "fog-smoke-test-#{Time.now.to_i}",
|
14
|
+
:machine_type => "f1-micro",
|
15
|
+
:zone_name => "us-central1-a",
|
16
|
+
:disks => [ disk.get_as_boot_disk(true) ],
|
17
|
+
:user => ENV['USER'],
|
18
|
+
:kernel => 'gce-v20130522',
|
19
|
+
}
|
20
|
+
|
21
|
+
server = connection.servers.bootstrap params
|
22
|
+
|
23
|
+
raise "Could not bootstrap sshable server." unless server.ssh("whoami")
|
24
|
+
raise "Could not delete server." unless server.destroy
|
25
|
+
raise "Could not delete disk." unless disk.destroy
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
server = connection.servers.create(defaults = {
|
4
|
+
:name => "fog-#{Time.now.to_i}",
|
5
|
+
:image_name => "debian-7-wheezy-v20130522",
|
6
|
+
:machine_type => "n1-standard-1",
|
7
|
+
:zone_name => "us-central1-a",
|
8
|
+
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
|
9
|
+
:public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
|
10
|
+
})
|
11
|
+
|
12
|
+
server.wait_for { ready? }
|
13
|
+
|
14
|
+
server.metadata["test"] = "foo"
|
15
|
+
|
16
|
+
raise "Metadata was not set." unless server.metadata["test"] == "foo"
|
17
|
+
raise "Could not delete server." unless server.destroy
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
|
4
|
+
# we create a new private network
|
5
|
+
connection.insert_network('my-private-network', '10.240.0.0/16')
|
6
|
+
|
7
|
+
server = connection.servers.create({
|
8
|
+
:name => "fog-smoke-test-#{Time.now.to_i}",
|
9
|
+
:image_name => "debian-7-wheezy-v20130522",
|
10
|
+
:machine_type => "n1-standard-1",
|
11
|
+
:zone_name => "us-central1-a",
|
12
|
+
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
|
13
|
+
:public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
|
14
|
+
:network => 'my-private-network',
|
15
|
+
:external_ip => false,
|
16
|
+
:user => ENV['USER'],
|
17
|
+
})
|
18
|
+
|
19
|
+
# The network won't have any firewall rules, so we won't be able to ssh in.
|
20
|
+
server.wait_for { ready? }
|
21
|
+
end
|
@@ -16,17 +16,28 @@ module Fog
|
|
16
16
|
attribute :description, :aliases => 'description'
|
17
17
|
attribute :size_gb, :aliases => 'sizeGb'
|
18
18
|
attribute :self_link, :aliases => 'selfLink'
|
19
|
-
attribute :
|
19
|
+
attribute :source_image, :aliases => 'sourceImage'
|
20
|
+
attribute :source_snapshot, :aliases => 'sourceSnapshot'
|
21
|
+
attribute :source_snapshot_id, :aliases => 'sourceSnapshot'
|
20
22
|
|
21
23
|
def save
|
22
|
-
|
24
|
+
requires :name
|
25
|
+
requires :zone_name
|
26
|
+
|
27
|
+
options = {}
|
28
|
+
if source_image.nil?
|
29
|
+
options['sourceSnapshot'] = source_snapshot
|
30
|
+
options['sizeGb'] = size_gb
|
31
|
+
end
|
32
|
+
|
33
|
+
data = service.insert_disk(name, zone_name, source_image, options).body
|
23
34
|
data = service.backoff_if_unfound {service.get_disk(name, zone_name).body}
|
24
35
|
service.disks.merge_attributes(data)
|
25
36
|
end
|
26
37
|
|
27
38
|
def destroy
|
28
|
-
requires :name, :
|
29
|
-
service.delete_disk(name,
|
39
|
+
requires :name, :zone_name
|
40
|
+
service.delete_disk(name, zone_name)
|
30
41
|
end
|
31
42
|
|
32
43
|
def zone
|
@@ -77,4 +88,4 @@ module Fog
|
|
77
88
|
end
|
78
89
|
end
|
79
90
|
end
|
80
|
-
end
|
91
|
+
end
|
@@ -10,15 +10,25 @@ module Fog
|
|
10
10
|
model Fog::Compute::Google::Disk
|
11
11
|
|
12
12
|
def all(zone)
|
13
|
-
data = service.list_disks(zone).body["items"]
|
13
|
+
data = service.list_disks(zone).body["items"] || []
|
14
14
|
load(data)
|
15
15
|
end
|
16
16
|
|
17
|
-
def get(identity, zone)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
def get(identity, zone=nil)
|
18
|
+
response = nil
|
19
|
+
if zone.nil?
|
20
|
+
service.list_zones.body['items'].each do |zone|
|
21
|
+
begin
|
22
|
+
response = service.get_disk(identity, zone['name'])
|
23
|
+
break if response.status == 200
|
24
|
+
rescue Fog::Errors::Error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
response = service.get_disk(identity, zone)
|
29
|
+
end
|
30
|
+
return nil if response.nil?
|
31
|
+
new(response.body)
|
22
32
|
end
|
23
33
|
|
24
34
|
end
|