gapinc-fog 1.12.1.2.1 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +16 -1
- data/Gemfile.1.8.7 +10 -0
- data/README.md +23 -2
- data/Rakefile +2 -2
- data/changelog.txt +276 -0
- data/fog.gemspec +4 -6
- data/lib/fog/atmos/models/storage/file.rb +2 -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/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/log_file.rb +26 -0
- data/lib/fog/aws/models/rds/log_files.rb +50 -0
- data/lib/fog/aws/models/rds/server.rb +1 -0
- data/lib/fog/aws/models/rds/snapshots.rb +20 -13
- data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +5 -5
- 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_db_log_files.rb +44 -0
- data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
- data/lib/fog/aws/parsers/rds/download_db_logfile_portion.rb +26 -0
- data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +1 -1
- data/lib/fog/aws/parsers/sts/assume_role.rb +30 -0
- data/lib/fog/aws/rds.rb +13 -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/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 +7 -0
- 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/rds/describe_db_log_files.rb +67 -0
- data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
- data/lib/fog/aws/requests/rds/download_db_logfile_portion.rb +63 -0
- data/lib/fog/aws/requests/ses/send_raw_email.rb +1 -1
- data/lib/fog/aws/requests/ses/verify_domain_identity.rb +1 -1
- data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +6 -2
- data/lib/fog/aws/requests/storage/get_object.rb +1 -1
- data/lib/fog/aws/requests/sts/assume_role.rb +46 -0
- data/lib/fog/aws/ses.rb +25 -9
- data/lib/fog/aws/sts.rb +22 -6
- data/lib/fog/bin/openstack.rb +5 -0
- 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/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/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/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/launch_micro_instance.rb +21 -0
- data/lib/fog/google/examples/metadata.rb +18 -0
- 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 +16 -17
- data/lib/fog/google/models/compute/images.rb +38 -5
- data/lib/fog/google/models/compute/server.rb +2 -2
- data/lib/fog/google/models/compute/servers.rb +8 -5
- 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/insert_server.rb +1 -2
- data/lib/fog/google/requests/compute/list_images.rb +3 -2
- data/lib/fog/google/requests/storage/get_object.rb +1 -1
- data/lib/fog/hp/requests/storage/get_object.rb +1 -1
- data/lib/fog/ibm/requests/compute/create_instance.rb +20 -15
- data/lib/fog/internet_archive/requests/storage/get_object.rb +1 -1
- data/lib/fog/metering.rb +25 -0
- data/lib/fog/openstack.rb +2 -1
- data/lib/fog/openstack/metering.rb +215 -0
- data/lib/fog/openstack/models/compute/server.rb +5 -2
- data/lib/fog/openstack/models/metering/resource.rb +24 -0
- data/lib/fog/openstack/models/metering/resources.rb +25 -0
- data/lib/fog/openstack/models/volume/volume.rb +3 -1
- data/lib/fog/openstack/models/volume/volumes.rb +2 -1
- data/lib/fog/openstack/network.rb +24 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +19 -1
- data/lib/fog/openstack/requests/compute/get_host_details.rb +2 -1
- data/lib/fog/openstack/requests/metering/get_resource.rb +32 -0
- data/lib/fog/openstack/requests/metering/get_samples.rb +55 -0
- data/lib/fog/openstack/requests/metering/get_statistics.rb +56 -0
- data/lib/fog/openstack/requests/metering/list_meters.rb +50 -0
- data/lib/fog/openstack/requests/metering/list_resources.rb +32 -0
- 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/put_object.rb +8 -5
- data/lib/fog/openstack/requests/volume/create_volume.rb +4 -2
- data/lib/fog/rackspace.rb +24 -4
- data/lib/fog/rackspace/block_storage.rb +8 -4
- data/lib/fog/rackspace/cdn.rb +21 -4
- data/lib/fog/rackspace/compute_v2.rb +15 -4
- data/lib/fog/rackspace/errors.rb +12 -5
- 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 +51 -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 +36 -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 +149 -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/delete_multiple_objects.rb +75 -0
- data/lib/fog/rackspace/requests/storage/delete_static_large_object.rb +50 -0
- data/lib/fog/rackspace/requests/storage/put_dynamic_obj_manifest.rb +44 -0
- data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
- data/lib/fog/rackspace/requests/storage/put_object_manifest.rb +3 -30
- data/lib/fog/rackspace/requests/storage/put_static_obj_manifest.rb +60 -0
- data/lib/fog/rackspace/storage.rb +24 -16
- data/lib/fog/riakcs/provisioning.rb +2 -1
- data/lib/fog/riakcs/usage.rb +2 -1
- data/lib/fog/vcloud/compute.rb +1 -1
- 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 +20 -38
- 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 +2 -0
- data/tests/aws/models/compute/volume_tests.rb +1 -1
- data/tests/aws/models/elb/model_tests.rb +28 -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/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 +35 -0
- data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
- data/tests/aws/requests/rds/log_file_tests.rb +19 -0
- data/tests/aws/requests/sts/assume_role_tests.rb +19 -0
- data/tests/core/mocking_tests.rb +15 -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/requests/metering/meter_tests.rb +52 -0
- data/tests/openstack/requests/metering/resource_tests.rb +19 -0
- 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 +56 -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/rackspace/requests/storage/large_object_tests.rb +303 -59
- data/tests/rackspace/requests/storage/object_tests.rb +73 -18
- 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 +177 -14
@@ -16,6 +16,18 @@ module Fog
|
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
19
|
+
|
20
|
+
class Mock
|
21
|
+
|
22
|
+
def delete_record(domain, record_id)
|
23
|
+
self.data[:records][domain].reject! { |record| record["record"]["id"] == record_id }
|
24
|
+
response = Excon::Response.new
|
25
|
+
response.status = 200
|
26
|
+
response
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -32,6 +32,18 @@ module Fog
|
|
32
32
|
end
|
33
33
|
|
34
34
|
end
|
35
|
+
|
36
|
+
class Mock
|
37
|
+
|
38
|
+
def get_domain(id)
|
39
|
+
domain = self.data[:domains].detect { |domain| domain["domain"]["id"] == id }
|
40
|
+
response = Excon::Response.new
|
41
|
+
response.status = 200
|
42
|
+
response.body = domain
|
43
|
+
response
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
35
47
|
end
|
36
48
|
end
|
37
49
|
end
|
@@ -29,6 +29,30 @@ module Fog
|
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
32
|
+
|
33
|
+
class Mock
|
34
|
+
|
35
|
+
def get_record(domain, record_id)
|
36
|
+
response = Excon::Response.new
|
37
|
+
if self.data[:records].has_key? domain
|
38
|
+
response.status = 200
|
39
|
+
response.body = self.data[:records][domain].detect { |record| record["record"]["id"] == record_id }
|
40
|
+
|
41
|
+
if response.body.nil?
|
42
|
+
response.status = 404
|
43
|
+
response.body = {
|
44
|
+
"error" => "Couldn't find Record with id = #{record_id}"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
else
|
48
|
+
response.status = 404
|
49
|
+
response.body = {
|
50
|
+
"error" => "Couldn't find Domain with name = #{domain}"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
response
|
54
|
+
end
|
55
|
+
end
|
32
56
|
end
|
33
57
|
end
|
34
58
|
end
|
@@ -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
|
@@ -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,21 @@
|
|
1
|
+
def test
|
2
|
+
connection = Fog::Compute.new({ :provider => "Google" })
|
3
|
+
time = Time.now.utc.to_i
|
4
|
+
disk = connection.disks.create({:name => 'foggydisk', :size_gb => 10, :zone_name => 'us-central1-a', :image_name => 'centos-6-v20130522'})
|
5
|
+
|
6
|
+
disk.wait_for { disk.ready? }
|
7
|
+
params = {
|
8
|
+
:name => "fog-smoke-test-#{Time.now.to_i}",
|
9
|
+
:machine_type => "f1-micro",
|
10
|
+
:zone_name => "us-central1-a",
|
11
|
+
:disks => [ disk.get_as_boot_disk(true) ],
|
12
|
+
:kernel => 'gce-v20130522',
|
13
|
+
:user => ENV['USER']
|
14
|
+
}
|
15
|
+
|
16
|
+
server = connection.servers.bootstrap params
|
17
|
+
|
18
|
+
raise "Could not bootstrap sshable server." unless server.ssh("whoami")
|
19
|
+
raise "Could not delete server." unless server.destroy
|
20
|
+
raise "Could not delete disk." unless disk.destroy
|
21
|
+
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
|
@@ -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
|
@@ -12,28 +12,27 @@ module Fog
|
|
12
12
|
attribute :creation_timestamp, :aliases => 'creationTimestamp'
|
13
13
|
attribute :description
|
14
14
|
attribute :preferred_kernel, :aliases => 'preferredKernel'
|
15
|
+
|
16
|
+
# This attribute is not available in the representation of an
|
17
|
+
# 'image' returned by the GCE servser (see GCE API). However,
|
18
|
+
# images are a global resource and a user can query for images
|
19
|
+
# across projects. Therefore we try to remember which project
|
20
|
+
# the image belongs to by tracking it in this attribute.
|
15
21
|
attribute :project
|
16
22
|
|
23
|
+
# A RawDisk, e.g. -
|
24
|
+
# {
|
25
|
+
# :source => url_to_gcs_file,
|
26
|
+
# :container_type => 'TAR',
|
27
|
+
# :sha1Checksum => ,
|
28
|
+
# }
|
29
|
+
attribute :raw_disk
|
30
|
+
|
31
|
+
|
17
32
|
def reload
|
18
33
|
requires :name
|
19
34
|
|
20
|
-
data =
|
21
|
-
|
22
|
-
# Try looking for the image in known projects
|
23
|
-
[
|
24
|
-
self.service.project,
|
25
|
-
'google',
|
26
|
-
'debian-cloud',
|
27
|
-
'centos-cloud',
|
28
|
-
].each do |owner|
|
29
|
-
begin
|
30
|
-
data = service.get_image(name, owner).body
|
31
|
-
data[:project] = owner
|
32
|
-
rescue
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
raise ArgumentError, 'Specified image was not found' if data.empty?
|
35
|
+
data = service.get_image(name, self.project).body
|
37
36
|
|
38
37
|
self.merge_attributes(data)
|
39
38
|
self
|
@@ -9,20 +9,53 @@ module Fog
|
|
9
9
|
|
10
10
|
model Fog::Compute::Google::Image
|
11
11
|
|
12
|
+
GLOBAL_PROJECTS = [ 'google',
|
13
|
+
'debian-cloud',
|
14
|
+
'centos-cloud',
|
15
|
+
]
|
16
|
+
|
12
17
|
def all
|
13
|
-
data =
|
18
|
+
data = []
|
19
|
+
all_projects = GLOBAL_PROJECTS + [ self.service.project ]
|
20
|
+
|
21
|
+
all_projects.each do |project|
|
22
|
+
images = service.list_images(project).body["items"] || []
|
23
|
+
|
24
|
+
# Keep track of the project in which we found the image(s)
|
25
|
+
images.each { |img| img[:project] = project }
|
26
|
+
data += images
|
27
|
+
end
|
28
|
+
|
14
29
|
load(data)
|
15
30
|
end
|
16
31
|
|
17
32
|
def get(identity)
|
18
|
-
|
33
|
+
# Search own project before global projects
|
34
|
+
all_projects = [ self.service.project ] + GLOBAL_PROJECTS
|
35
|
+
|
36
|
+
data = nil
|
37
|
+
all_projects.each do |project|
|
38
|
+
begin
|
39
|
+
data = service.get_image(identity, project).body
|
40
|
+
data[:project] = project
|
41
|
+
rescue Fog::Errors::Error
|
42
|
+
next
|
43
|
+
else
|
44
|
+
break
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# If it wasn't found in any project, raise
|
49
|
+
if data.nil?
|
50
|
+
raise Fog::Errors::Error.new('Unable to find the specified image '\
|
51
|
+
'in the following projects: '\
|
52
|
+
"#{all_projects.join(', ')}")
|
53
|
+
end
|
54
|
+
|
19
55
|
new(data)
|
20
|
-
rescue Excon::Errors::NotFound
|
21
|
-
nil
|
22
56
|
end
|
23
57
|
|
24
58
|
end
|
25
|
-
|
26
59
|
end
|
27
60
|
end
|
28
61
|
end
|