fog-maestrodev 1.19.0.20140212012611 → 1.20.0.20140305101305
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/.gitignore +2 -0
- data/.travis.yml +10 -0
- data/CONTRIBUTORS.md +694 -0
- data/Gemfile.1.8.7 +1 -1
- data/LICENSE.md +17 -17
- data/Rakefile +1 -1
- data/benchs/each_provider.sh +6 -0
- data/benchs/each_service.sh +6 -0
- data/benchs/load_times.rb +6 -0
- data/changelog.txt +312 -0
- data/fog.gemspec +3 -5
- data/lib/fog.rb +1 -0
- data/lib/fog/atmos.rb +1 -11
- data/lib/fog/atmos/core.rb +11 -0
- data/lib/fog/atmos/requests/storage/get_namespace.rb +1 -1
- data/lib/fog/atmos/requests/storage/head_namespace.rb +1 -1
- data/lib/fog/atmos/storage.rb +1 -1
- data/lib/fog/aws.rb +22 -323
- data/lib/fog/aws/auto_scaling.rb +1 -1
- data/lib/fog/aws/beanstalk.rb +1 -1
- data/lib/fog/aws/cdn.rb +1 -1
- data/lib/fog/aws/cloud_formation.rb +1 -1
- data/lib/fog/aws/cloud_watch.rb +1 -1
- data/lib/fog/aws/compute.rb +12 -1
- data/lib/fog/aws/core.rb +329 -0
- data/lib/fog/aws/data_pipeline.rb +1 -1
- data/lib/fog/aws/dns.rb +1 -1
- data/lib/fog/aws/dynamodb.rb +1 -1
- data/lib/fog/aws/elasticache.rb +10 -3
- data/lib/fog/aws/elb.rb +1 -1
- data/lib/fog/aws/emr.rb +1 -2
- data/lib/fog/aws/glacier.rb +1 -1
- data/lib/fog/aws/iam.rb +1 -1
- data/lib/fog/aws/models/compute/dhcp_option.rb +2 -2
- data/lib/fog/aws/models/compute/flavor.rb +2 -0
- data/lib/fog/aws/models/compute/flavors.rb +363 -49
- data/lib/fog/aws/models/compute/network_acl.rb +170 -0
- data/lib/fog/aws/models/compute/network_acls.rb +138 -0
- data/lib/fog/aws/models/compute/server.rb +2 -2
- data/lib/fog/aws/models/compute/servers.rb +7 -2
- data/lib/fog/aws/models/compute/subnet.rb +2 -2
- data/lib/fog/aws/models/elasticache/cluster.rb +6 -0
- data/lib/fog/aws/models/elasticache/subnet_group.rb +35 -0
- data/lib/fog/aws/models/elasticache/subnet_groups.rb +27 -0
- data/lib/fog/aws/models/rds/snapshot.rb +1 -0
- data/lib/fog/aws/models/storage/file.rb +1 -1
- data/lib/fog/aws/parsers/compute/create_network_acl.rb +28 -0
- data/lib/fog/aws/parsers/compute/create_subnet.rb +2 -3
- data/lib/fog/aws/parsers/compute/describe_network_acls.rb +42 -0
- data/lib/fog/aws/parsers/compute/describe_reserved_instances.rb +29 -3
- data/lib/fog/aws/parsers/compute/network_acl_parser.rb +105 -0
- data/lib/fog/aws/parsers/compute/network_interface_parser.rb +16 -0
- data/lib/fog/aws/parsers/compute/replace_network_acl_association.rb +20 -0
- data/lib/fog/aws/parsers/compute/run_instances.rb +1 -1
- data/lib/fog/aws/parsers/elasticache/cache_cluster_parser.rb +2 -2
- data/lib/fog/aws/parsers/elasticache/create_cache_subnet_group.rb +38 -0
- data/lib/fog/aws/parsers/elasticache/describe_cache_subnet_groups.rb +38 -0
- data/lib/fog/aws/parsers/elasticache/subnet_group_parser.rb +38 -0
- data/lib/fog/aws/parsers/iam/upload_server_certificate.rb +1 -1
- data/lib/fog/aws/parsers/rds/db_parser.rb +6 -0
- data/lib/fog/aws/parsers/rds/snapshot_parser.rb +1 -0
- data/lib/fog/aws/rds.rb +1 -1
- data/lib/fog/aws/redshift.rb +1 -1
- data/lib/fog/aws/requests/compute/create_network_acl.rb +105 -0
- data/lib/fog/aws/requests/compute/create_network_acl_entry.rb +80 -0
- data/lib/fog/aws/requests/compute/create_subnet.rb +14 -4
- data/lib/fog/aws/requests/compute/create_vpc.rb +7 -1
- data/lib/fog/aws/requests/compute/delete_network_acl.rb +52 -0
- data/lib/fog/aws/requests/compute/delete_network_acl_entry.rb +55 -0
- data/lib/fog/aws/requests/compute/delete_vpc.rb +4 -0
- data/lib/fog/aws/requests/compute/describe_network_acls.rb +104 -0
- data/lib/fog/aws/requests/compute/describe_network_interfaces.rb +4 -0
- data/lib/fog/aws/requests/compute/disassociate_address.rb +4 -3
- data/lib/fog/aws/requests/compute/replace_network_acl_association.rb +66 -0
- data/lib/fog/aws/requests/compute/replace_network_acl_entry.rb +81 -0
- data/lib/fog/aws/requests/compute/replace_route.rb +84 -0
- data/lib/fog/aws/requests/compute/request_spot_instances.rb +8 -0
- data/lib/fog/aws/requests/compute/run_instances.rb +23 -3
- data/lib/fog/aws/requests/data_pipeline/put_pipeline_definition.rb +29 -21
- data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +18 -11
- data/lib/fog/aws/requests/elasticache/create_cache_subnet_group.rb +66 -0
- data/lib/fog/aws/requests/elasticache/delete_cache_subnet_group.rb +40 -0
- data/lib/fog/aws/requests/elasticache/describe_cache_subnet_groups.rb +63 -0
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +3 -2
- data/lib/fog/aws/requests/iam/delete_server_certificate.rb +3 -1
- data/lib/fog/aws/requests/rds/create_db_instance.rb +2 -0
- data/lib/fog/aws/requests/rds/create_db_instance_read_replica.rb +1 -0
- data/lib/fog/aws/requests/rds/create_db_snapshot.rb +1 -1
- data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +2 -0
- data/lib/fog/aws/requests/rds/modify_db_instance.rb +1 -0
- data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +18 -0
- data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +23 -0
- data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +24 -0
- data/lib/fog/aws/requests/storage/put_object.rb +18 -54
- data/lib/fog/aws/requests/storage/shared_mock_methods.rb +87 -0
- data/lib/fog/aws/requests/storage/upload_part.rb +18 -0
- data/lib/fog/aws/ses.rb +1 -1
- data/lib/fog/aws/simpledb.rb +1 -1
- data/lib/fog/aws/sns.rb +1 -2
- data/lib/fog/aws/sqs.rb +5 -4
- data/lib/fog/aws/storage.rb +15 -5
- data/lib/fog/aws/sts.rb +1 -1
- data/lib/fog/bare_metal_cloud.rb +1 -11
- data/lib/fog/bare_metal_cloud/compute.rb +1 -1
- data/lib/fog/bare_metal_cloud/core.rb +11 -0
- data/lib/fog/bin.rb +1 -0
- data/lib/fog/bin/rage4.rb +31 -0
- data/lib/fog/bluebox.rb +3 -13
- data/lib/fog/bluebox/blb.rb +2 -2
- data/lib/fog/bluebox/compute.rb +1 -1
- data/lib/fog/bluebox/core.rb +13 -0
- data/lib/fog/bluebox/dns.rb +2 -2
- data/lib/fog/bluebox/models/compute/server.rb +1 -1
- data/lib/fog/brightbox.rb +1 -10
- data/lib/fog/brightbox/compute.rb +20 -1
- data/lib/fog/brightbox/core.rb +10 -0
- data/lib/fog/brightbox/models/compute/cloud_ip.rb +5 -0
- data/lib/fog/brightbox/models/compute/database_server.rb +91 -0
- data/lib/fog/brightbox/models/compute/database_servers.rb +28 -0
- data/lib/fog/brightbox/models/compute/database_snapshot.rb +52 -0
- data/lib/fog/brightbox/models/compute/database_snapshots.rb +24 -0
- data/lib/fog/brightbox/models/compute/database_type.rb +19 -0
- data/lib/fog/brightbox/models/compute/database_types.rb +26 -0
- data/lib/fog/brightbox/requests/compute/create_database_server.rb +25 -0
- data/lib/fog/brightbox/requests/compute/delete_database_server.rb +26 -0
- data/lib/fog/brightbox/requests/compute/delete_database_snapshot.rb +26 -0
- data/lib/fog/brightbox/requests/compute/get_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/get_database_snapshot.rb +19 -0
- data/lib/fog/brightbox/requests/compute/get_database_type.rb +21 -0
- data/lib/fog/brightbox/requests/compute/list_database_servers.rb +17 -0
- data/lib/fog/brightbox/requests/compute/list_database_snapshots.rb +17 -0
- data/lib/fog/brightbox/requests/compute/list_database_types.rb +19 -0
- data/lib/fog/brightbox/requests/compute/reset_password_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/snapshot_database_server.rb +19 -0
- data/lib/fog/brightbox/requests/compute/update_database_server.rb +25 -0
- data/lib/fog/brightbox/requests/compute/update_database_snapshot.rb +26 -0
- data/lib/fog/clodo.rb +1 -34
- data/lib/fog/clodo/compute.rb +2 -0
- data/lib/fog/clodo/core.rb +34 -0
- data/lib/fog/clodo/models/compute/server.rb +2 -2
- data/lib/fog/cloudsigma.rb +1 -9
- data/lib/fog/cloudsigma/compute.rb +2 -2
- data/lib/fog/cloudsigma/core.rb +9 -0
- data/lib/fog/cloudstack.rb +1 -40
- data/lib/fog/cloudstack/compute.rb +1 -1
- data/lib/fog/cloudstack/core.rb +40 -0
- data/lib/fog/cloudstack/models/compute/server.rb +3 -0
- data/lib/fog/compute/models/server.rb +33 -7
- data/lib/fog/core/collection.rb +1 -3
- data/lib/fog/core/errors.rb +2 -0
- data/lib/fog/core/hmac.rb +3 -16
- data/lib/fog/core/logger.rb +3 -3
- data/lib/fog/core/provider.rb +1 -2
- data/lib/fog/digitalocean.rb +1 -9
- data/lib/fog/digitalocean/compute.rb +1 -1
- data/lib/fog/digitalocean/core.rb +9 -0
- data/lib/fog/digitalocean/models/compute/server.rb +3 -2
- data/lib/fog/digitalocean/models/compute/servers.rb +23 -4
- data/lib/fog/digitalocean/requests/compute/create_server.rb +2 -1
- data/lib/fog/digitalocean/requests/compute/destroy_server.rb +3 -1
- data/lib/fog/dnsimple.rb +1 -11
- data/lib/fog/dnsimple/core.rb +11 -0
- data/lib/fog/dnsimple/dns.rb +5 -2
- data/lib/fog/dnsimple/models/dns/record.rb +3 -3
- data/lib/fog/dnsimple/requests/dns/create_domain.rb +26 -22
- data/lib/fog/dnsimple/requests/dns/create_record.rb +21 -24
- data/lib/fog/dnsimple/requests/dns/delete_domain.rb +7 -6
- data/lib/fog/dnsimple/requests/dns/delete_record.rb +7 -5
- data/lib/fog/dnsimple/requests/dns/get_domain.rb +12 -18
- data/lib/fog/dnsimple/requests/dns/get_record.rb +11 -17
- data/lib/fog/dnsimple/requests/dns/list_domains.rb +7 -15
- data/lib/fog/dnsimple/requests/dns/list_records.rb +10 -15
- data/lib/fog/dnsimple/requests/dns/update_record.rb +14 -19
- data/lib/fog/dnsmadeeasy.rb +1 -11
- data/lib/fog/dnsmadeeasy/core.rb +11 -0
- data/lib/fog/dnsmadeeasy/dns.rb +1 -1
- data/lib/fog/dreamhost.rb +1 -11
- data/lib/fog/dreamhost/core.rb +11 -0
- data/lib/fog/dreamhost/dns.rb +1 -1
- data/lib/fog/dynect.rb +1 -26
- data/lib/fog/dynect/core.rb +26 -0
- data/lib/fog/dynect/dns.rb +1 -1
- data/lib/fog/dynect/requests/dns/put_record.rb +5 -4
- data/lib/fog/dynect/requests/dns/put_zone.rb +5 -4
- data/lib/fog/ecloud.rb +1 -31
- data/lib/fog/ecloud/compute.rb +1 -0
- data/lib/fog/ecloud/core.rb +31 -0
- data/lib/fog/glesys.rb +1 -11
- data/lib/fog/glesys/compute.rb +6 -4
- data/lib/fog/glesys/core.rb +11 -0
- data/lib/fog/glesys/models/compute/server.rb +2 -2
- data/lib/fog/go_grid.rb +1 -11
- data/lib/fog/go_grid/compute.rb +1 -1
- data/lib/fog/go_grid/core.rb +11 -0
- data/lib/fog/go_grid/models/compute/server.rb +2 -2
- data/lib/fog/google.rb +2 -24
- data/lib/fog/google/README.md +8 -5
- data/lib/fog/google/compute.rb +10 -3
- data/lib/fog/google/core.rb +24 -0
- data/lib/fog/google/models/compute/flavors.rb +1 -1
- data/lib/fog/google/models/compute/images.rb +2 -0
- data/lib/fog/google/models/compute/servers.rb +1 -1
- data/lib/fog/google/models/compute/zones.rb +1 -1
- data/lib/fog/google/requests/compute/attach_disk.rb +29 -0
- data/lib/fog/google/requests/compute/delete_address.rb +31 -0
- data/lib/fog/google/requests/compute/delete_snapshot.rb +35 -0
- data/lib/fog/google/requests/compute/detach_disk.rb +29 -0
- data/lib/fog/google/requests/compute/get_address.rb +31 -0
- data/lib/fog/google/requests/compute/insert_address.rb +30 -0
- data/lib/fog/google/requests/compute/insert_firewall.rb +6 -9
- data/lib/fog/google/requests/compute/list_addresses.rb +28 -0
- data/lib/fog/google/requests/compute/set_metadata.rb +4 -5
- data/lib/fog/google/requests/compute/set_tags.rb +33 -0
- data/lib/fog/google/requests/storage/get_bucket_acl.rb +2 -2
- data/lib/fog/google/requests/storage/put_bucket_acl.rb +39 -48
- data/lib/fog/google/requests/storage/put_object_acl.rb +55 -0
- data/lib/fog/google/storage.rb +2 -1
- data/lib/fog/hp.rb +9 -352
- data/lib/fog/hp/block_storage.rb +1 -1
- data/lib/fog/hp/block_storage_v2.rb +1 -1
- data/lib/fog/hp/cdn.rb +1 -1
- data/lib/fog/hp/compute.rb +1 -1
- data/lib/fog/hp/compute_v2.rb +1 -1
- data/lib/fog/hp/core.rb +352 -0
- data/lib/fog/hp/dns.rb +1 -1
- data/lib/fog/hp/lb.rb +1 -1
- data/lib/fog/hp/models/compute/server.rb +2 -2
- data/lib/fog/hp/models/compute_v2/server.rb +2 -2
- data/lib/fog/hp/models/storage/directory.rb +12 -6
- data/lib/fog/hp/network.rb +1 -1
- data/lib/fog/hp/storage.rb +1 -1
- data/lib/fog/ibm.rb +2 -176
- data/lib/fog/ibm/compute.rb +1 -1
- data/lib/fog/ibm/core.rb +176 -0
- data/lib/fog/ibm/storage.rb +1 -1
- data/lib/fog/internet_archive.rb +1 -292
- data/lib/fog/internet_archive/core.rb +292 -0
- data/lib/fog/internet_archive/models/storage/file.rb +1 -1
- data/lib/fog/internet_archive/storage.rb +1 -1
- data/lib/fog/joyent.rb +2 -10
- data/lib/fog/joyent/compute.rb +1 -1
- data/lib/fog/joyent/core.rb +10 -0
- data/lib/fog/joyent/errors.rb +1 -0
- data/lib/fog/libvirt.rb +1 -11
- data/lib/fog/libvirt/compute.rb +1 -1
- data/lib/fog/libvirt/core.rb +11 -0
- data/lib/fog/libvirt/models/compute/README.md +1 -1
- data/lib/fog/libvirt/models/compute/server.rb +6 -6
- data/lib/fog/libvirt/models/compute/templates/volume.xml.erb +12 -0
- data/lib/fog/libvirt/models/compute/volume.rb +1 -0
- data/lib/fog/linode.rb +2 -10
- data/lib/fog/linode/compute.rb +1 -1
- data/lib/fog/linode/core.rb +10 -0
- data/lib/fog/linode/dns.rb +1 -1
- data/lib/fog/local.rb +1 -11
- data/lib/fog/local/core.rb +11 -0
- data/lib/fog/local/storage.rb +1 -1
- data/lib/fog/ninefold.rb +1 -12
- data/lib/fog/ninefold/compute.rb +1 -1
- data/lib/fog/ninefold/core.rb +12 -0
- data/lib/fog/openstack.rb +8 -249
- data/lib/fog/openstack/compute.rb +3 -1
- data/lib/fog/openstack/core.rb +249 -0
- data/lib/fog/openstack/docs/compute.md +681 -0
- data/lib/fog/openstack/docs/getting_started.md +81 -0
- data/lib/fog/openstack/docs/storage.md +441 -0
- data/lib/fog/openstack/identity.rb +1 -1
- data/lib/fog/openstack/image.rb +1 -1
- data/lib/fog/openstack/metering.rb +1 -1
- data/lib/fog/openstack/models/compute/server.rb +13 -5
- data/lib/fog/openstack/models/compute/servers.rb +13 -0
- data/lib/fog/openstack/models/network/network.rb +9 -11
- data/lib/fog/openstack/models/network/security_group.rb +32 -0
- data/lib/fog/openstack/models/network/security_group_rule.rb +33 -0
- data/lib/fog/openstack/models/network/security_group_rules.rb +33 -0
- data/lib/fog/openstack/models/network/security_groups.rb +34 -0
- data/lib/fog/openstack/models/storage/directories.rb +1 -0
- data/lib/fog/openstack/network.rb +19 -1
- data/lib/fog/openstack/orchestration.rb +1 -1
- data/lib/fog/openstack/requests/compute/add_security_group.rb +24 -0
- data/lib/fog/openstack/requests/compute/create_flavor.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +3 -3
- data/lib/fog/openstack/requests/compute/remove_security_group.rb +24 -0
- data/lib/fog/openstack/requests/image/update_image_members.rb +2 -2
- data/lib/fog/openstack/requests/network/create_security_group.rb +94 -0
- data/lib/fog/openstack/requests/network/create_security_group_rule.rb +79 -0
- data/lib/fog/openstack/requests/network/delete_security_group.rb +32 -0
- data/lib/fog/openstack/requests/network/delete_security_group_rule.rb +36 -0
- data/lib/fog/openstack/requests/network/get_security_group.rb +52 -0
- data/lib/fog/openstack/requests/network/get_security_group_rule.rb +47 -0
- data/lib/fog/openstack/requests/network/list_networks.rb +0 -1
- data/lib/fog/openstack/requests/network/list_security_group_rules.rb +52 -0
- data/lib/fog/openstack/requests/network/list_security_groups.rb +57 -0
- data/lib/fog/openstack/storage.rb +2 -2
- data/lib/fog/openstack/volume.rb +1 -1
- data/lib/fog/openvz.rb +1 -9
- data/lib/fog/openvz/compute.rb +1 -1
- data/lib/fog/openvz/core.rb +9 -0
- data/lib/fog/ovirt.rb +1 -17
- data/lib/fog/ovirt/compute.rb +2 -0
- data/lib/fog/ovirt/core.rb +17 -0
- data/lib/fog/rackspace.rb +12 -145
- data/lib/fog/rackspace/auto_scale.rb +1 -1
- data/lib/fog/rackspace/block_storage.rb +5 -1
- data/lib/fog/rackspace/cdn.rb +22 -16
- data/lib/fog/rackspace/compute.rb +1 -1
- data/lib/fog/rackspace/compute_v2.rb +6 -2
- data/lib/fog/rackspace/core.rb +145 -0
- data/lib/fog/rackspace/databases.rb +5 -1
- data/lib/fog/rackspace/dns.rb +1 -1
- data/lib/fog/rackspace/docs/compute_v2.md +2 -10
- data/lib/fog/rackspace/errors.rb +1 -1
- data/lib/fog/rackspace/examples/storage/upload_file.rb +1 -1
- data/lib/fog/rackspace/identity.rb +26 -16
- data/lib/fog/rackspace/load_balancers.rb +7 -1
- data/lib/fog/rackspace/mock_data.rb +17 -0
- data/lib/fog/rackspace/models/compute/server.rb +2 -2
- data/lib/fog/rackspace/models/compute_v2/key_pair.rb +1 -1
- data/lib/fog/rackspace/models/compute_v2/server.rb +42 -5
- data/lib/fog/rackspace/models/monitoring/entities.rb +1 -1
- data/lib/fog/rackspace/models/queues/claim.rb +9 -1
- data/lib/fog/rackspace/models/storage/directory.rb +5 -2
- data/lib/fog/rackspace/models/storage/file.rb +14 -0
- data/lib/fog/rackspace/monitoring.rb +11 -2
- data/lib/fog/rackspace/queues.rb +318 -34
- data/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +16 -5
- data/lib/fog/rackspace/requests/compute_v2/create_server.rb +7 -1
- data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +1 -1
- data/lib/fog/rackspace/requests/identity/create_token.rb +192 -0
- data/lib/fog/rackspace/requests/identity/list_tenants.rb +23 -0
- data/lib/fog/rackspace/requests/monitoring/get_agent.rb +45 -0
- data/lib/fog/rackspace/requests/monitoring/get_cpus_info.rb +63 -0
- data/lib/fog/rackspace/requests/monitoring/get_disks_info.rb +56 -0
- data/lib/fog/rackspace/requests/monitoring/get_filesystems_info.rb +64 -0
- data/lib/fog/rackspace/requests/monitoring/get_logged_in_user_info.rb +58 -0
- data/lib/fog/rackspace/requests/monitoring/get_memory_info.rb +59 -0
- data/lib/fog/rackspace/requests/monitoring/get_network_interfaces_info.rb +91 -0
- data/lib/fog/rackspace/requests/monitoring/get_processes_info.rb +72 -0
- data/lib/fog/rackspace/requests/monitoring/get_system_info.rb +53 -0
- data/lib/fog/rackspace/requests/monitoring/list_agents.rb +62 -0
- data/lib/fog/rackspace/requests/queues/create_claim.rb +37 -0
- data/lib/fog/rackspace/requests/queues/create_message.rb +23 -0
- data/lib/fog/rackspace/requests/queues/create_queue.rb +15 -1
- data/lib/fog/rackspace/requests/queues/delete_claim.rb +18 -0
- data/lib/fog/rackspace/requests/queues/delete_message.rb +34 -0
- data/lib/fog/rackspace/requests/queues/delete_queue.rb +12 -0
- data/lib/fog/rackspace/requests/queues/get_claim.rb +15 -0
- data/lib/fog/rackspace/requests/queues/get_message.rb +17 -0
- data/lib/fog/rackspace/requests/queues/get_queue.rb +14 -1
- data/lib/fog/rackspace/requests/queues/get_queue_stats.rb +36 -0
- data/lib/fog/rackspace/requests/queues/list_messages.rb +33 -0
- data/lib/fog/rackspace/requests/queues/list_queues.rb +35 -1
- data/lib/fog/rackspace/requests/queues/update_claim.rb +17 -0
- data/lib/fog/rackspace/requests/storage/delete_container.rb +15 -0
- data/lib/fog/rackspace/requests/storage/delete_multiple_objects.rb +57 -0
- data/lib/fog/rackspace/requests/storage/delete_object.rb +14 -0
- data/lib/fog/rackspace/requests/storage/delete_static_large_object.rb +33 -0
- data/lib/fog/rackspace/requests/storage/extract_archive.rb +39 -0
- data/lib/fog/rackspace/requests/storage/get_container.rb +25 -0
- data/lib/fog/rackspace/requests/storage/get_containers.rb +17 -0
- data/lib/fog/rackspace/requests/storage/get_object.rb +26 -0
- data/lib/fog/rackspace/requests/storage/get_object_http_url.rb +9 -2
- data/lib/fog/rackspace/requests/storage/get_object_https_url.rb +8 -1
- data/lib/fog/rackspace/requests/storage/head_container.rb +12 -0
- data/lib/fog/rackspace/requests/storage/head_containers.rb +19 -0
- data/lib/fog/rackspace/requests/storage/head_object.rb +26 -0
- data/lib/fog/rackspace/requests/storage/post_set_meta_temp_url_key.rb +10 -0
- data/lib/fog/rackspace/requests/storage/put_container.rb +16 -0
- data/lib/fog/rackspace/requests/storage/put_dynamic_obj_manifest.rb +23 -0
- data/lib/fog/rackspace/requests/storage/put_object.rb +39 -0
- data/lib/fog/rackspace/requests/storage/put_object_manifest.rb +9 -1
- data/lib/fog/rackspace/requests/storage/put_static_obj_manifest.rb +48 -0
- data/lib/fog/rackspace/storage.rb +320 -67
- data/lib/fog/rage4.rb +2 -0
- data/lib/fog/rage4/core.rb +11 -0
- data/lib/fog/rage4/dns.rb +74 -0
- data/lib/fog/rage4/models/dns/record.rb +77 -0
- data/lib/fog/rage4/models/dns/records.rb +42 -0
- data/lib/fog/rage4/models/dns/zone.rb +46 -0
- data/lib/fog/rage4/models/dns/zones.rb +34 -0
- data/lib/fog/rage4/requests/dns/create_domain.rb +33 -0
- data/lib/fog/rage4/requests/dns/create_domain_vanity.rb +34 -0
- data/lib/fog/rage4/requests/dns/create_record.rb +65 -0
- data/lib/fog/rage4/requests/dns/create_reverse_domain_4.rb +32 -0
- data/lib/fog/rage4/requests/dns/delete_domain.rb +28 -0
- data/lib/fog/rage4/requests/dns/delete_record.rb +28 -0
- data/lib/fog/rage4/requests/dns/get_domain.rb +30 -0
- data/lib/fog/rage4/requests/dns/get_domain_by_name.rb +30 -0
- data/lib/fog/rage4/requests/dns/list_domains.rb +41 -0
- data/lib/fog/rage4/requests/dns/list_geo_regions.rb +27 -0
- data/lib/fog/rage4/requests/dns/list_record_types.rb +26 -0
- data/lib/fog/rage4/requests/dns/list_records.rb +31 -0
- data/lib/fog/rage4/requests/dns/set_record_failover.rb +29 -0
- data/lib/fog/rage4/requests/dns/show_current_usage.rb +25 -0
- data/lib/fog/rage4/requests/dns/show_global_usage.rb +25 -0
- data/lib/fog/rage4/requests/dns/update_domain.rb +43 -0
- data/lib/fog/rage4/requests/dns/update_record.rb +64 -0
- data/lib/fog/riakcs.rb +2 -122
- data/lib/fog/riakcs/core.rb +122 -0
- data/lib/fog/riakcs/provisioning.rb +1 -1
- data/lib/fog/riakcs/usage.rb +1 -1
- data/lib/fog/serverlove.rb +1 -10
- data/lib/fog/serverlove/compute.rb +2 -0
- data/lib/fog/serverlove/core.rb +10 -0
- data/lib/fog/storm_on_demand.rb +9 -20
- data/lib/fog/storm_on_demand/account.rb +1 -1
- data/lib/fog/storm_on_demand/billing.rb +1 -1
- data/lib/fog/storm_on_demand/compute.rb +1 -1
- data/lib/fog/storm_on_demand/core.rb +20 -0
- data/lib/fog/storm_on_demand/dns.rb +1 -1
- data/lib/fog/storm_on_demand/monitoring.rb +1 -1
- data/lib/fog/storm_on_demand/network.rb +1 -1
- data/lib/fog/storm_on_demand/shared.rb +0 -1
- data/lib/fog/storm_on_demand/storage.rb +1 -1
- data/lib/fog/storm_on_demand/support.rb +1 -1
- data/lib/fog/storm_on_demand/vpn.rb +1 -1
- data/lib/fog/vcloud.rb +1 -11
- data/lib/fog/vcloud/compute.rb +1 -1
- data/lib/fog/vcloud/core.rb +11 -0
- data/lib/fog/vcloud_director.rb +1 -67
- data/lib/fog/vcloud_director/compute.rb +1 -1
- data/lib/fog/vcloud_director/core.rb +67 -0
- data/lib/fog/vcloud_director/generators/compute/edge_gateway_service_configuration.rb +1 -1
- data/lib/fog/version.rb +1 -1
- data/lib/fog/vmfusion.rb +1 -11
- data/lib/fog/vmfusion/compute.rb +1 -1
- data/lib/fog/vmfusion/core.rb +11 -0
- data/lib/fog/vmfusion/models/compute/server.rb +5 -5
- data/lib/fog/voxel.rb +1 -16
- data/lib/fog/voxel/compute.rb +1 -1
- data/lib/fog/voxel/core.rb +16 -0
- data/lib/fog/vsphere.rb +1 -17
- data/lib/fog/vsphere/compute.rb +1 -0
- data/lib/fog/vsphere/core.rb +17 -0
- data/lib/fog/xenserver.rb +1 -83
- data/lib/fog/xenserver/compute.rb +1 -1
- data/lib/fog/xenserver/core.rb +83 -0
- data/lib/fog/xenserver/models/compute/storage_manager.rb +1 -1
- data/lib/fog/zerigo.rb +1 -11
- data/lib/fog/zerigo/core.rb +11 -0
- data/lib/fog/zerigo/dns.rb +1 -1
- data/lib/tasks/changelog_task.rb +2 -0
- data/tests/aws/models/compute/network_acl_tests.rb +109 -0
- data/tests/aws/models/compute/network_acls_tests.rb +7 -0
- data/tests/aws/models/elasticache/subnet_groups_tests.rb +44 -0
- data/tests/aws/requests/compute/network_acl_tests.rb +86 -0
- data/tests/aws/requests/compute/route_tests.rb +64 -3
- data/tests/aws/requests/compute/subnet_tests.rb +18 -11
- data/tests/aws/requests/elasticache/helper.rb +19 -0
- data/tests/aws/requests/elasticache/subnet_group_tests.rb +52 -0
- data/tests/aws/requests/iam/server_certificate_tests.rb +3 -0
- data/tests/aws/requests/rds/subnet_groups_tests.rb +1 -1
- data/tests/aws/requests/storage/multipart_upload_tests.rb +3 -14
- data/tests/brightbox/compute/schema.rb +118 -2
- data/tests/brightbox/helper.rb +1 -0
- data/tests/brightbox/models/compute/cloud_ip_tests.rb +32 -0
- data/tests/brightbox/models/compute/database_server_tests.rb +66 -0
- data/tests/brightbox/models/compute/database_snapshot_tests.rb +26 -0
- data/tests/brightbox/models/compute/database_type_tests.rb +27 -0
- data/tests/brightbox/requests/compute/database_server_tests.rb +54 -0
- data/tests/brightbox/requests/compute/database_snapsnot_tests.rb +47 -0
- data/tests/brightbox/requests/compute/database_type_tests.rb +17 -0
- data/tests/compute/models/server_tests.rb +20 -2
- data/tests/digitalocean/helper.rb +9 -4
- data/tests/digitalocean/models/compute/server_tests.rb +1 -0
- data/tests/digitalocean/models/compute/servers_tests.rb +19 -4
- data/tests/digitalocean/requests/compute/create_server_tests.rb +13 -6
- data/tests/digitalocean/requests/compute/list_servers_tests.rb +2 -1
- data/tests/dns/helper.rb +3 -0
- data/tests/dns/models/record_tests.rb +1 -1
- data/tests/dns/models/records_tests.rb +1 -1
- data/tests/dns/models/zone_tests.rb +1 -1
- data/tests/dns/models/zones_tests.rb +1 -1
- data/tests/helper.rb +7 -1
- data/tests/helpers/compute/server_helper.rb +1 -0
- data/tests/helpers/compute/servers_helper.rb +1 -0
- data/tests/openstack/models/network/security_group_rule_tests.rb +27 -0
- data/tests/openstack/models/network/security_group_rules_tests.rb +25 -0
- data/tests/openstack/models/network/security_group_tests.rb +17 -0
- data/tests/openstack/models/network/security_groups_tests.rb +16 -0
- data/tests/openstack/requests/compute/helper.rb +5 -0
- data/tests/openstack/requests/compute/server_tests.rb +11 -0
- data/tests/openstack/requests/network/security_group_rule_tests.rb +58 -0
- data/tests/openstack/requests/network/security_group_tests.rb +43 -0
- data/tests/rackspace/identity_tests.rb +0 -4
- data/tests/rackspace/models/compute_v2/server_tests.rb +36 -8
- data/tests/rackspace/models/queues/claim_tests.rb +1 -3
- data/tests/rackspace/models/queues/claims_tests.rb +1 -3
- data/tests/rackspace/models/queues/message_tests.rb +1 -3
- data/tests/rackspace/models/queues/messages_tests.rb +1 -3
- data/tests/rackspace/models/queues/queue_tests.rb +1 -3
- data/tests/rackspace/models/queues/queues_tests.rb +1 -3
- data/tests/rackspace/models/storage/account_tests.rb +0 -2
- data/tests/rackspace/models/storage/directories_tests.rb +0 -3
- data/tests/rackspace/models/storage/directory_tests.rb +2 -5
- data/tests/rackspace/models/storage/file_tests.rb +49 -2
- data/tests/rackspace/models/storage/files_tests.rb +1 -4
- data/tests/rackspace/queues_tests.rb +0 -13
- data/tests/rackspace/requests/identity/token_tests.rb +1 -3
- data/tests/rackspace/requests/monitoring/agent_tests.rb +42 -0
- data/tests/rackspace/requests/queues/claim_tests.rb +1 -3
- data/tests/rackspace/requests/queues/messages_tests.rb +0 -6
- data/tests/rackspace/requests/queues/queues_tests.rb +0 -5
- data/tests/rackspace/requests/storage/account_tests.rb +0 -1
- data/tests/rackspace/requests/storage/container_tests.rb +7 -11
- data/tests/rackspace/requests/storage/large_object_tests.rb +33 -43
- data/tests/rackspace/requests/storage/object_tests.rb +2 -27
- data/tests/rackspace/storage_tests.rb +9 -15
- data/tests/rage4/requests/dns/dns_tests.rb +241 -0
- data/tests/vcloud/requests/compute/disk_configure_tests.rb +0 -8
- metadata +190 -33
- data/lib/fog/brightbox/requests/compute/destroy_user_collaboration.rb +0 -21
@@ -1,6 +1,7 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
+
|
4
5
|
class Real
|
5
6
|
|
6
7
|
# Get headers for object
|
@@ -21,6 +22,31 @@ module Fog
|
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|
25
|
+
|
26
|
+
class Mock
|
27
|
+
def head_object(container, object)
|
28
|
+
c = mock_container! container
|
29
|
+
o = c.mock_object! object
|
30
|
+
|
31
|
+
headers = o.to_headers
|
32
|
+
|
33
|
+
hashes, length = [], 0
|
34
|
+
o.each_part do |part|
|
35
|
+
hashes << part.hash
|
36
|
+
length += part.bytes_used
|
37
|
+
end
|
38
|
+
|
39
|
+
headers['Etag'] = "\"#{Digest::MD5.hexdigest(hashes.join)}\""
|
40
|
+
headers['Content-Length'] = length.to_s
|
41
|
+
headers['X-Static-Large-Object'] = "True" if o.static_manifest?
|
42
|
+
|
43
|
+
response = Excon::Response.new
|
44
|
+
response.status = 200
|
45
|
+
response.headers = headers
|
46
|
+
response
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
24
50
|
end
|
25
51
|
end
|
26
52
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
+
|
4
5
|
class Real
|
5
6
|
|
6
7
|
# Create a new container
|
@@ -21,6 +22,21 @@ module Fog
|
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|
25
|
+
|
26
|
+
class Mock
|
27
|
+
def put_container(name, options={})
|
28
|
+
existed = ! mock_container(name).nil?
|
29
|
+
container = add_container(name)
|
30
|
+
options.keys.each do |k|
|
31
|
+
container.meta[k] = options[k].to_s if k =~ /^X-Container-Meta/
|
32
|
+
end
|
33
|
+
|
34
|
+
response = Excon::Response.new
|
35
|
+
response.status = existed ? 202 : 201
|
36
|
+
response
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
24
40
|
end
|
25
41
|
end
|
26
42
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
+
|
4
5
|
class Real
|
5
6
|
|
6
7
|
# Create a new dynamic large object manifest
|
@@ -39,6 +40,28 @@ module Fog
|
|
39
40
|
end
|
40
41
|
|
41
42
|
end
|
43
|
+
|
44
|
+
class Mock
|
45
|
+
def put_dynamic_obj_manifest(container, object, options = {})
|
46
|
+
path = "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}"
|
47
|
+
|
48
|
+
# Escape the X-Object-Manifest header to match.
|
49
|
+
explicit_manifest = options['X-Object-Manifest']
|
50
|
+
if explicit_manifest
|
51
|
+
parts = explicit_manifest.split('/', 2)
|
52
|
+
explicit_manifest = parts.map { |p| Fog::Rackspace.escape p }.join('/')
|
53
|
+
end
|
54
|
+
|
55
|
+
c = mock_container! container
|
56
|
+
o = c.add_object object, ''
|
57
|
+
o.meta['X-Object-Manifest'] = explicit_manifest || path
|
58
|
+
|
59
|
+
response = Excon::Response.new
|
60
|
+
response.status = 201
|
61
|
+
response
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
42
65
|
end
|
43
66
|
end
|
44
67
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
+
|
4
5
|
class Real
|
5
6
|
|
6
7
|
# Create a new object
|
@@ -36,6 +37,44 @@ module Fog
|
|
36
37
|
request(params)
|
37
38
|
end
|
38
39
|
end
|
40
|
+
|
41
|
+
class Mock
|
42
|
+
HeaderOptions = %w{
|
43
|
+
Content-Type Access-Control-Allow-Origin Origin Content-Disposition
|
44
|
+
Etag Content-Encoding
|
45
|
+
}.freeze
|
46
|
+
|
47
|
+
def put_object(container, object, data, options = {}, &block)
|
48
|
+
c = mock_container! container
|
49
|
+
|
50
|
+
if block_given?
|
51
|
+
data = ""
|
52
|
+
loop do
|
53
|
+
chunk = yield
|
54
|
+
break if chunk.empty?
|
55
|
+
data << chunk
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
o = c.add_object object, data
|
60
|
+
options.keys.each do |k|
|
61
|
+
o.meta[k] = options[k].to_s if k =~ /^X-Object-Meta/
|
62
|
+
o.meta[k] = options[k] if HeaderOptions.include? k
|
63
|
+
end
|
64
|
+
|
65
|
+
# Validate the provided Etag
|
66
|
+
etag = o.meta['Etag']
|
67
|
+
if etag && etag != o.hash
|
68
|
+
c.remove_object object
|
69
|
+
raise Fog::Storage::Rackspace::ServiceError.new
|
70
|
+
end
|
71
|
+
|
72
|
+
response = Excon::Response.new
|
73
|
+
response.status = 201
|
74
|
+
response
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
39
78
|
end
|
40
79
|
end
|
41
80
|
end
|
@@ -1,16 +1,24 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
-
class Real
|
5
4
|
|
5
|
+
module Common
|
6
6
|
# Create a new dynamic large object manifest
|
7
7
|
#
|
8
8
|
# This is an alias for {#put_dynamic_obj_manifest} for backward compatibility.
|
9
9
|
def put_object_manifest(container, object, options = {})
|
10
10
|
put_dynamic_obj_manifest(container, object, options)
|
11
11
|
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Real
|
15
|
+
include Common
|
16
|
+
end
|
12
17
|
|
18
|
+
class Mock
|
19
|
+
include Common
|
13
20
|
end
|
21
|
+
|
14
22
|
end
|
15
23
|
end
|
16
24
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Fog
|
2
2
|
module Storage
|
3
3
|
class Rackspace
|
4
|
+
|
4
5
|
class Real
|
5
6
|
|
6
7
|
# Create a new static large object manifest.
|
@@ -53,6 +54,53 @@ module Fog
|
|
53
54
|
end
|
54
55
|
|
55
56
|
end
|
57
|
+
|
58
|
+
class Mock
|
59
|
+
def put_static_obj_manifest(container, object, segments, options = {})
|
60
|
+
c = mock_container! container
|
61
|
+
|
62
|
+
# Verify paths.
|
63
|
+
errors = []
|
64
|
+
segments.each do |segment|
|
65
|
+
cname, oname = segment[:path].split('/', 2)
|
66
|
+
target_container = mock_container(cname)
|
67
|
+
|
68
|
+
raise Fog::Storage::Rackspace::NotFound.new unless target_container
|
69
|
+
|
70
|
+
target_object = target_container.mock_object oname
|
71
|
+
unless target_object
|
72
|
+
errors << [segment[:path], '404 Not Found']
|
73
|
+
next
|
74
|
+
end
|
75
|
+
|
76
|
+
unless target_object.hash == segment[:etag]
|
77
|
+
errors << [segment[:path], 'Etag Mismatch']
|
78
|
+
end
|
79
|
+
|
80
|
+
unless target_object.bytes_used == segment[:size_bytes]
|
81
|
+
errors << [segment[:path], 'Size Mismatch']
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
unless errors.empty?
|
86
|
+
response = Excon::Response.new
|
87
|
+
response.status = 400
|
88
|
+
response.body = Fog::JSON.encode({ 'Errors' => errors })
|
89
|
+
|
90
|
+
error = Excon::Errors.status_error({}, response)
|
91
|
+
raise Fog::Storage::Rackspace::BadRequest.slurp(error)
|
92
|
+
end
|
93
|
+
|
94
|
+
data = Fog::JSON.encode(segments)
|
95
|
+
o = c.add_object object, data
|
96
|
+
o.static_manifest = true
|
97
|
+
|
98
|
+
response = Excon::Response.new
|
99
|
+
response.status = 201
|
100
|
+
response
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
56
104
|
end
|
57
105
|
end
|
58
106
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'fog/rackspace'
|
1
|
+
require 'fog/rackspace/core'
|
2
2
|
require 'fog/storage'
|
3
3
|
|
4
4
|
module Fog
|
@@ -41,8 +41,23 @@ module Fog
|
|
41
41
|
request :put_dynamic_obj_manifest
|
42
42
|
request :put_static_obj_manifest
|
43
43
|
request :post_set_meta_temp_url_key
|
44
|
+
request :extract_archive
|
44
45
|
|
45
|
-
module
|
46
|
+
module Common
|
47
|
+
def apply_options(options)
|
48
|
+
@rackspace_api_key = options[:rackspace_api_key]
|
49
|
+
@rackspace_username = options[:rackspace_username]
|
50
|
+
@rackspace_cdn_ssl = options[:rackspace_cdn_ssl]
|
51
|
+
@rackspace_auth_url = options[:rackspace_auth_url]
|
52
|
+
@rackspace_servicenet = options[:rackspace_servicenet]
|
53
|
+
@rackspace_auth_token = options[:rackspace_auth_token]
|
54
|
+
@rackspace_storage_url = options[:rackspace_storage_url]
|
55
|
+
@rackspace_cdn_url = options[:rackspace_cdn_url]
|
56
|
+
@rackspace_region = options[:rackspace_region] || :dfw
|
57
|
+
@rackspace_temp_url_key = options[:rackspace_temp_url_key]
|
58
|
+
@rackspace_must_reauthenticate = false
|
59
|
+
@connection_options = options[:connection_options] || {}
|
60
|
+
end
|
46
61
|
|
47
62
|
def cdn
|
48
63
|
@cdn ||= Fog::CDN.new(
|
@@ -59,10 +74,249 @@ module Fog
|
|
59
74
|
end
|
60
75
|
end
|
61
76
|
|
77
|
+
def service_net?
|
78
|
+
@rackspace_servicenet == true
|
79
|
+
end
|
80
|
+
|
81
|
+
def authenticate
|
82
|
+
if @rackspace_must_reauthenticate || @rackspace_auth_token.nil?
|
83
|
+
options = {
|
84
|
+
:rackspace_api_key => @rackspace_api_key,
|
85
|
+
:rackspace_username => @rackspace_username,
|
86
|
+
:rackspace_auth_url => @rackspace_auth_url,
|
87
|
+
:connection_options => @connection_options
|
88
|
+
}
|
89
|
+
super(options)
|
90
|
+
else
|
91
|
+
@auth_token = @rackspace_auth_token
|
92
|
+
@uri = URI.parse(@rackspace_storage_url)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def service_name
|
97
|
+
:cloudFiles
|
98
|
+
end
|
99
|
+
|
100
|
+
def request_id_header
|
101
|
+
"X-Trans-Id"
|
102
|
+
end
|
103
|
+
|
104
|
+
def region
|
105
|
+
@rackspace_region
|
106
|
+
end
|
107
|
+
|
108
|
+
def endpoint_uri(service_endpoint_url=nil)
|
109
|
+
return @uri if @uri
|
110
|
+
super(@rackspace_storage_url || service_endpoint_url, :rackspace_storage_url)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Return Account Details
|
114
|
+
# @return [Fog::Storage::Rackspace::Account] account details object
|
115
|
+
def account
|
116
|
+
account = Fog::Storage::Rackspace::Account.new(:service => self)
|
117
|
+
account.reload
|
118
|
+
end
|
62
119
|
end
|
63
120
|
|
64
121
|
class Mock < Fog::Rackspace::Service
|
65
|
-
include
|
122
|
+
include Common
|
123
|
+
|
124
|
+
# An in-memory container for use with Rackspace storage mocks. Includes
|
125
|
+
# many `objects` mapped by (escaped) object name. Tracks container
|
126
|
+
# metadata.
|
127
|
+
class MockContainer
|
128
|
+
attr_reader :objects, :meta, :service
|
129
|
+
|
130
|
+
# Create a new container. Generally, you should call
|
131
|
+
# {Fog::Rackspace::Storage#add_container} instead.
|
132
|
+
def initialize(service)
|
133
|
+
@service = service
|
134
|
+
@objects, @meta = {}, {}
|
135
|
+
end
|
136
|
+
|
137
|
+
# Determine if this container contains any MockObjects or not.
|
138
|
+
#
|
139
|
+
# @return [Boolean]
|
140
|
+
def empty?
|
141
|
+
@objects.empty?
|
142
|
+
end
|
143
|
+
|
144
|
+
# Total sizes of all objects added to this container.
|
145
|
+
#
|
146
|
+
# @return [Integer] The number of bytes occupied by each contained
|
147
|
+
# object.
|
148
|
+
def bytes_used
|
149
|
+
@objects.values.map { |o| o.bytes_used }.inject(0) { |a, b| a + b }
|
150
|
+
end
|
151
|
+
|
152
|
+
# Render the HTTP headers that would be associated with this
|
153
|
+
# container.
|
154
|
+
#
|
155
|
+
# @return [Hash<String, String>] Any metadata supplied to this
|
156
|
+
# container, plus additional headers indicating the container's
|
157
|
+
# size.
|
158
|
+
def to_headers
|
159
|
+
@meta.merge({
|
160
|
+
'X-Container-Object-Count' => @objects.size,
|
161
|
+
'X-Container-Bytes-Used' => bytes_used
|
162
|
+
})
|
163
|
+
end
|
164
|
+
|
165
|
+
# Access a MockObject within this container by (unescaped) name.
|
166
|
+
#
|
167
|
+
# @return [MockObject, nil] Return the MockObject at this name if
|
168
|
+
# one exists; otherwise, `nil`.
|
169
|
+
def mock_object(name)
|
170
|
+
@objects[Fog::Rackspace.escape(name)]
|
171
|
+
end
|
172
|
+
|
173
|
+
# Access a MockObject with a specific name, raising a
|
174
|
+
# `Fog::Storage::Rackspace::NotFound` exception if none are present.
|
175
|
+
#
|
176
|
+
# @param name [String] (Unescaped) object name.
|
177
|
+
# @return [MockObject] The object within this container with the
|
178
|
+
# specified name.
|
179
|
+
def mock_object!(name)
|
180
|
+
mock_object(name) or raise Fog::Storage::Rackspace::NotFound.new
|
181
|
+
end
|
182
|
+
|
183
|
+
# Add a new MockObject to this container. An existing object with
|
184
|
+
# the same name will be overwritten.
|
185
|
+
#
|
186
|
+
# @param name [String] The object's name, unescaped.
|
187
|
+
# @param data [String, #read] The contents of the object.
|
188
|
+
def add_object(name, data)
|
189
|
+
@objects[Fog::Rackspace.escape(name)] = MockObject.new(data, service)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Remove a MockObject from the container by name. No effect if the
|
193
|
+
# object is not present beforehand.
|
194
|
+
#
|
195
|
+
# @param name [String] The (unescaped) object name to remove.
|
196
|
+
def remove_object(name)
|
197
|
+
@objects.delete Fog::Rackspace.escape(name)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
# An in-memory Swift object.
|
202
|
+
class MockObject
|
203
|
+
attr_reader :hash, :bytes_used, :content_type, :last_modified
|
204
|
+
attr_reader :body, :meta, :service
|
205
|
+
attr_accessor :static_manifest
|
206
|
+
|
207
|
+
# Construct a new object. Generally, you should call
|
208
|
+
# {MockContainer#add_object} instead of instantiating these directly.
|
209
|
+
def initialize(data, service)
|
210
|
+
data = Fog::Storage.parse_data(data)
|
211
|
+
@service = service
|
212
|
+
|
213
|
+
@bytes_used = data[:headers]['Content-Length']
|
214
|
+
@content_type = data[:headers]['Content-Type']
|
215
|
+
if data[:body].respond_to? :read
|
216
|
+
@body = data[:body].read
|
217
|
+
else
|
218
|
+
@body = data[:body]
|
219
|
+
end
|
220
|
+
@last_modified = Time.now.utc
|
221
|
+
@hash = Digest::MD5.hexdigest(@body)
|
222
|
+
@meta = {}
|
223
|
+
@static_manifest = false
|
224
|
+
end
|
225
|
+
|
226
|
+
# Determine if this object was created as a static large object
|
227
|
+
# manifest.
|
228
|
+
#
|
229
|
+
# @return [Boolean]
|
230
|
+
def static_manifest?
|
231
|
+
@static_manifest
|
232
|
+
end
|
233
|
+
|
234
|
+
# Determine if this object has the metadata header that marks it as a
|
235
|
+
# dynamic large object manifest.
|
236
|
+
#
|
237
|
+
# @return [Boolean]
|
238
|
+
def dynamic_manifest?
|
239
|
+
! large_object_prefix.nil?
|
240
|
+
end
|
241
|
+
|
242
|
+
# Iterate through each MockObject that contains a part of the data for
|
243
|
+
# this logical object. In the normal case, this will only yield the
|
244
|
+
# receiver directly. For dynamic and static large object manifests,
|
245
|
+
# however, this call will yield each MockObject that contains a part
|
246
|
+
# of the whole, in sequence.
|
247
|
+
#
|
248
|
+
# Manifests that refer to containers or objects that don't exist will
|
249
|
+
# skip those sections and log a warning, instead.
|
250
|
+
#
|
251
|
+
# @yield [MockObject] Each object that holds a part of this logical
|
252
|
+
# object.
|
253
|
+
def each_part
|
254
|
+
case
|
255
|
+
when dynamic_manifest?
|
256
|
+
# Concatenate the contents and sizes of each matching object.
|
257
|
+
# Note that cname and oprefix are already escaped.
|
258
|
+
cname, oprefix = large_object_prefix.split('/', 2)
|
259
|
+
|
260
|
+
target_container = service.data[cname]
|
261
|
+
if target_container
|
262
|
+
all = target_container.objects.keys
|
263
|
+
matching = all.select { |name| name.start_with? oprefix }
|
264
|
+
keys = matching.sort
|
265
|
+
|
266
|
+
keys.each do |name|
|
267
|
+
yield target_container.objects[name]
|
268
|
+
end
|
269
|
+
else
|
270
|
+
Fog::Logger.warning "Invalid container in dynamic object manifest: #{cname}"
|
271
|
+
yield self
|
272
|
+
end
|
273
|
+
when static_manifest?
|
274
|
+
Fog::JSON.decode(body).each do |segment|
|
275
|
+
cname, oname = segment['path'].split('/', 2)
|
276
|
+
|
277
|
+
cont = service.mock_container cname
|
278
|
+
unless cont
|
279
|
+
Fog::Logger.warning "Invalid container in static object manifest: #{cname}"
|
280
|
+
next
|
281
|
+
end
|
282
|
+
|
283
|
+
obj = cont.mock_object oname
|
284
|
+
unless obj
|
285
|
+
Fog::Logger.warning "Invalid object in static object manifest: #{oname}"
|
286
|
+
next
|
287
|
+
end
|
288
|
+
|
289
|
+
yield obj
|
290
|
+
end
|
291
|
+
else
|
292
|
+
yield self
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
# Access the object name prefix that controls which other objects
|
297
|
+
# comprise a dynamic large object.
|
298
|
+
#
|
299
|
+
# @return [String, nil] The object name prefix, or `nil` if none is
|
300
|
+
# present.
|
301
|
+
def large_object_prefix
|
302
|
+
@meta['X-Object-Manifest']
|
303
|
+
end
|
304
|
+
|
305
|
+
# Construct the fake HTTP headers that should be returned on requests
|
306
|
+
# targetting this object. Includes computed `Content-Type`,
|
307
|
+
# `Content-Length`, `Last-Modified` and `ETag` headers in addition to
|
308
|
+
# whatever metadata has been associated with this object manually.
|
309
|
+
#
|
310
|
+
# @return [Hash<String, String>] Header values stored in a Hash.
|
311
|
+
def to_headers
|
312
|
+
{
|
313
|
+
'Content-Type' => @content_type,
|
314
|
+
'Content-Length' => @bytes_used,
|
315
|
+
'Last-Modified' => @last_modified.strftime('%a, %b %d %Y %H:%M:%S %Z'),
|
316
|
+
'ETag' => @hash
|
317
|
+
}.merge(@meta)
|
318
|
+
end
|
319
|
+
end
|
66
320
|
|
67
321
|
def self.data
|
68
322
|
@data ||= Hash.new do |hash, key|
|
@@ -70,56 +324,98 @@ module Fog
|
|
70
324
|
end
|
71
325
|
end
|
72
326
|
|
327
|
+
# Access or create account-wide metadata.
|
328
|
+
#
|
329
|
+
# @return [Hash<String,String>] A metadata hash pre-populated with
|
330
|
+
# a (fake) temp URL key.
|
331
|
+
def self.account_meta
|
332
|
+
@account_meta ||= Hash.new do |hash, key|
|
333
|
+
hash[key] = {
|
334
|
+
'X-Account-Meta-Temp-Url-Key' => Fog::Mock.random_hex(32)
|
335
|
+
}
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
73
339
|
def self.reset
|
74
340
|
@data = nil
|
341
|
+
@account_meta = nil
|
75
342
|
end
|
76
343
|
|
77
344
|
def initialize(options={})
|
78
|
-
|
79
|
-
|
80
|
-
|
345
|
+
apply_options(options)
|
346
|
+
authenticate
|
347
|
+
endpoint_uri
|
81
348
|
end
|
82
349
|
|
83
350
|
def data
|
84
351
|
self.class.data[@rackspace_username]
|
85
352
|
end
|
86
353
|
|
354
|
+
def account_meta
|
355
|
+
self.class.account_meta[@rackspace_username]
|
356
|
+
end
|
357
|
+
|
87
358
|
def reset_data
|
88
359
|
self.class.data.delete(@rackspace_username)
|
89
360
|
end
|
90
361
|
|
91
|
-
|
92
|
-
|
362
|
+
# Access a MockContainer with the specified name, if one exists.
|
363
|
+
#
|
364
|
+
# @param cname [String] The (unescaped) container name.
|
365
|
+
# @return [MockContainer, nil] The named MockContainer, or `nil` if
|
366
|
+
# none exist.
|
367
|
+
def mock_container(cname)
|
368
|
+
data[Fog::Rackspace.escape(cname)]
|
93
369
|
end
|
94
370
|
|
95
|
-
|
96
|
-
|
371
|
+
# Access a MockContainer with the specified name, raising a
|
372
|
+
# {Fog::Storage::Rackspace::NotFound} exception if none exist.
|
373
|
+
#
|
374
|
+
# @param cname [String] The (unescaped) container name.
|
375
|
+
# @throws [Fog::Storage::Rackspace::NotFound] If no container with the
|
376
|
+
# given name exists.
|
377
|
+
# @return [MockContainer] The existing MockContainer.
|
378
|
+
def mock_container!(cname)
|
379
|
+
mock_container(cname) or raise Fog::Storage::Rackspace::NotFound.new
|
380
|
+
end
|
381
|
+
|
382
|
+
# Create and add a new, empty MockContainer with the given name. An
|
383
|
+
# existing container with the same name will be replaced.
|
384
|
+
#
|
385
|
+
# @param cname [String] The (unescaped) container name.
|
386
|
+
# @return [MockContainer] The container that was added.
|
387
|
+
def add_container(cname)
|
388
|
+
data[Fog::Rackspace.escape(cname)] = MockContainer.new(self)
|
389
|
+
end
|
390
|
+
|
391
|
+
# Remove a MockContainer with the specified name. No-op if the
|
392
|
+
# container does not exist.
|
393
|
+
#
|
394
|
+
# @param cname [String] The (unescaped) container name.
|
395
|
+
def remove_container(cname)
|
396
|
+
data.delete Fog::Rackspace.escape(cname)
|
97
397
|
end
|
98
398
|
|
99
399
|
def ssl?
|
100
400
|
!!@rackspace_cdn_ssl
|
101
401
|
end
|
102
402
|
|
403
|
+
private
|
404
|
+
|
405
|
+
def authenticate_v1(options)
|
406
|
+
uuid = Fog::Rackspace::MockData.uuid
|
407
|
+
endpoint_uri "https://storage101.#{region}1.clouddrive.com/v1/MockCloudFS_#{uuid}"
|
408
|
+
@auth_token = Fog::Mock.random_hex(32)
|
409
|
+
end
|
103
410
|
end
|
104
411
|
|
105
412
|
class Real < Fog::Rackspace::Service
|
106
|
-
include
|
413
|
+
include Common
|
107
414
|
|
108
415
|
attr_reader :rackspace_cdn_ssl
|
109
416
|
|
110
417
|
def initialize(options={})
|
111
|
-
|
112
|
-
@rackspace_username = options[:rackspace_username]
|
113
|
-
@rackspace_cdn_ssl = options[:rackspace_cdn_ssl]
|
114
|
-
@rackspace_auth_url = options[:rackspace_auth_url]
|
115
|
-
@rackspace_servicenet = options[:rackspace_servicenet]
|
116
|
-
@rackspace_auth_token = options[:rackspace_auth_token]
|
117
|
-
@rackspace_storage_url = options[:rackspace_storage_url]
|
118
|
-
@rackspace_cdn_url = options[:rackspace_cdn_url]
|
119
|
-
@rackspace_region = options[:rackspace_region] || :dfw
|
120
|
-
@rackspace_temp_url_key = options[:rackspace_temp_url_key]
|
121
|
-
@rackspace_must_reauthenticate = false
|
122
|
-
@connection_options = options[:connection_options] || {}
|
418
|
+
apply_options(options)
|
123
419
|
|
124
420
|
authenticate
|
125
421
|
@persistent = options[:persistent] || false
|
@@ -127,13 +423,6 @@ module Fog
|
|
127
423
|
@connection = Fog::Connection.new(endpoint_uri.to_s, @persistent, @connection_options)
|
128
424
|
end
|
129
425
|
|
130
|
-
# Return Account Details
|
131
|
-
# @return [Fog::Storage::Rackspace::Account] account details object
|
132
|
-
def account
|
133
|
-
account = Fog::Storage::Rackspace::Account.new(:service => self)
|
134
|
-
account.reload
|
135
|
-
end
|
136
|
-
|
137
426
|
# Using SSL?
|
138
427
|
# @return [Boolean] return true if service is returning SSL-Secured URLs in public_url methods
|
139
428
|
# @see Directory#public_url
|
@@ -158,42 +447,6 @@ module Fog
|
|
158
447
|
raise ServiceError.slurp(error, self)
|
159
448
|
end
|
160
449
|
|
161
|
-
def service_net?
|
162
|
-
@rackspace_servicenet == true
|
163
|
-
end
|
164
|
-
|
165
|
-
def authenticate
|
166
|
-
if @rackspace_must_reauthenticate || @rackspace_auth_token.nil?
|
167
|
-
options = {
|
168
|
-
:rackspace_api_key => @rackspace_api_key,
|
169
|
-
:rackspace_username => @rackspace_username,
|
170
|
-
:rackspace_auth_url => @rackspace_auth_url,
|
171
|
-
:connection_options => @connection_options
|
172
|
-
}
|
173
|
-
super(options)
|
174
|
-
else
|
175
|
-
@auth_token = @rackspace_auth_token
|
176
|
-
@uri = URI.parse(@rackspace_storage_url)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
def service_name
|
181
|
-
:cloudFiles
|
182
|
-
end
|
183
|
-
|
184
|
-
def request_id_header
|
185
|
-
"X-Trans-Id"
|
186
|
-
end
|
187
|
-
|
188
|
-
def region
|
189
|
-
@rackspace_region
|
190
|
-
end
|
191
|
-
|
192
|
-
def endpoint_uri(service_endpoint_url=nil)
|
193
|
-
return @uri if @uri
|
194
|
-
super(@rackspace_storage_url || service_endpoint_url, :rackspace_storage_url)
|
195
|
-
end
|
196
|
-
|
197
450
|
private
|
198
451
|
|
199
452
|
def authenticate_v1(options)
|
@@ -201,8 +454,8 @@ module Fog
|
|
201
454
|
endpoint_uri credentials['X-Storage-Url']
|
202
455
|
@auth_token = credentials['X-Auth-Token']
|
203
456
|
end
|
204
|
-
|
205
457
|
end
|
458
|
+
|
206
459
|
end
|
207
460
|
end
|
208
461
|
end
|