fog 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/README.md +9 -10
- data/Rakefile +15 -299
- data/changelog.txt +153 -0
- data/docs/about/contributing.markdown +1 -0
- data/docs/dns/index.markdown +1 -1
- data/docs/index.markdown +8 -3
- data/fog.gemspec +3 -3
- data/lib/fog.rb +0 -5
- data/lib/fog/aws/auto_scaling.rb +1 -1
- data/lib/fog/aws/cloud_watch.rb +1 -1
- data/lib/fog/aws/compute.rb +2 -1
- data/lib/fog/aws/dynamodb.rb +30 -64
- data/lib/fog/aws/elb.rb +1 -1
- data/lib/fog/aws/glacier.rb +1 -1
- data/lib/fog/aws/iam.rb +1 -0
- data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
- data/lib/fog/aws/models/compute/server.rb +2 -0
- data/lib/fog/aws/models/compute/volume.rb +0 -1
- data/lib/fog/aws/models/iam/user.rb +1 -1
- data/lib/fog/aws/parsers/compute/describe_instances.rb +3 -1
- data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
- data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +50 -0
- data/lib/fog/aws/rds.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
- data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +11 -8
- data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +51 -0
- data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -0
- data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +172 -0
- data/lib/fog/aws/signaturev4.rb +1 -1
- data/lib/fog/aws/sqs.rb +1 -1
- data/lib/fog/aws/storage.rb +2 -0
- data/lib/fog/bluebox/requests/compute/create_block.rb +1 -3
- data/lib/fog/brightbox/compute.rb +239 -84
- data/lib/fog/brightbox/models/compute/account.rb +9 -3
- data/lib/fog/brightbox/models/compute/server.rb +2 -1
- data/lib/fog/brightbox/models/compute/servers.rb +33 -1
- data/lib/fog/brightbox/oauth2.rb +164 -0
- data/lib/fog/brightbox/requests/compute/activate_console_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +9 -11
- data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_api_client.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_application.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +11 -1
- data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +13 -2
- data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +17 -2
- data/lib/fog/brightbox/requests/compute/create_image.rb +18 -2
- data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +14 -2
- data/lib/fog/brightbox/requests/compute/create_server.rb +17 -2
- data/lib/fog/brightbox/requests/compute/create_server_group.rb +11 -2
- data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_image.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_account.rb +7 -15
- data/lib/fog/brightbox/requests/compute/get_api_client.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -3
- data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_image.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_interface.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -5
- data/lib/fog/brightbox/requests/compute/get_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_server_group.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_server_type.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_user.rb +7 -15
- data/lib/fog/brightbox/requests/compute/get_zone.rb +9 -2
- data/lib/fog/brightbox/requests/compute/list_accounts.rb +6 -2
- data/lib/fog/brightbox/requests/compute/list_api_clients.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_applications.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_images.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_server_groups.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_server_types.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_servers.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_users.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_zones.rb +8 -2
- data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +11 -2
- data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +10 -12
- data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +9 -10
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +22 -3
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
- data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +13 -1
- data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/shutdown_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/snapshot_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/start_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/stop_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/update_account.rb +32 -34
- data/lib/fog/brightbox/requests/compute/update_api_client.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_application.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +13 -2
- data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +16 -1
- data/lib/fog/brightbox/requests/compute/update_image.rb +17 -2
- data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +15 -2
- data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +12 -19
- data/lib/fog/brightbox/requests/compute/update_server.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_server_group.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_user.rb +15 -2
- data/lib/fog/cloudstack/models/compute/server.rb +3 -1
- data/lib/fog/core.rb +1 -0
- data/lib/fog/core/connection.rb +1 -0
- data/lib/fog/google/storage.rb +13 -2
- data/lib/fog/libvirt/models/compute/server.rb +1 -0
- data/lib/fog/libvirt/requests/compute/list_domains.rb +2 -2
- data/lib/fog/openstack.rb +57 -58
- data/lib/fog/openstack/compute.rb +15 -14
- data/lib/fog/openstack/identity.rb +10 -2
- data/lib/fog/openstack/image.rb +1 -1
- data/lib/fog/openstack/models/compute/flavor.rb +5 -1
- data/lib/fog/openstack/models/compute/security_group.rb +1 -1
- data/lib/fog/openstack/models/compute/server.rb +5 -0
- data/lib/fog/openstack/models/identity/users.rb +1 -2
- data/lib/fog/openstack/requests/compute/create_flavor.rb +4 -1
- data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
- data/lib/fog/openstack/requests/compute/get_limits.rb +93 -0
- data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
- data/lib/fog/openstack/requests/compute/release_address.rb +13 -1
- data/lib/fog/openstack/requests/compute/reset_server_state.rb +24 -0
- data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
- data/lib/fog/openstack/requests/identity/set_tenant.rb +21 -0
- data/lib/fog/openstack/volume.rb +2 -1
- data/lib/fog/rackspace/models/compute_v2/server.rb +27 -0
- data/lib/fog/rackspace/models/compute_v2/servers.rb +8 -0
- data/lib/fog/rackspace/models/dns/record.rb +14 -1
- data/lib/fog/rackspace/models/storage/file.rb +68 -2
- data/lib/fog/rackspace/requests/compute_v2/create_server.rb +3 -0
- data/lib/fog/version.rb +5 -0
- data/lib/fog/vsphere/compute.rb +74 -8
- data/lib/fog/vsphere/models/compute/cluster.rb +31 -0
- data/lib/fog/vsphere/models/compute/clusters.rb +26 -0
- data/lib/fog/vsphere/models/compute/datacenter.rb +35 -0
- data/lib/fog/vsphere/models/compute/datacenters.rb +23 -0
- data/lib/fog/vsphere/models/compute/datastore.rb +24 -0
- data/lib/fog/vsphere/models/compute/datastores.rb +25 -0
- data/lib/fog/vsphere/models/compute/folder.rb +28 -0
- data/lib/fog/vsphere/models/compute/folders.rb +27 -0
- data/lib/fog/vsphere/models/compute/interface.rb +39 -0
- data/lib/fog/vsphere/models/compute/interfaces.rb +33 -0
- data/lib/fog/vsphere/models/compute/network.rb +21 -0
- data/lib/fog/vsphere/models/compute/networks.rb +25 -0
- data/lib/fog/vsphere/models/compute/resource_pool.rb +23 -0
- data/lib/fog/vsphere/models/compute/resource_pools.rb +26 -0
- data/lib/fog/vsphere/models/compute/server.rb +78 -12
- data/lib/fog/vsphere/models/compute/servers.rb +16 -20
- data/lib/fog/vsphere/models/compute/template.rb +13 -0
- data/lib/fog/vsphere/models/compute/templates.rb +23 -0
- data/lib/fog/vsphere/models/compute/volume.rb +45 -0
- data/lib/fog/vsphere/models/compute/volumes.rb +33 -0
- data/lib/fog/vsphere/requests/compute/create_vm.rb +114 -0
- data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_datacenter.rb +29 -0
- data/lib/fog/vsphere/requests/compute/get_datastore.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_folder.rb +73 -0
- data/lib/fog/vsphere/requests/compute/get_network.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
- data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +62 -0
- data/lib/fog/vsphere/requests/compute/list_clusters.rb +37 -0
- data/lib/fog/vsphere/requests/compute/list_datacenters.rb +34 -0
- data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
- data/lib/fog/vsphere/requests/compute/list_folders.rb +45 -0
- data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
- data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +39 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -166
- data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +52 -0
- data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +51 -0
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -8
- data/lib/fog/vsphere/requests/compute/vm_destroy.rb +1 -8
- data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -2
- data/lib/tasks/changelog_task.rb +98 -0
- data/lib/tasks/documentation_task.rb +155 -0
- data/lib/tasks/test_task.rb +46 -0
- data/tests/aws/models/iam/users_tests.rb +16 -2
- data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +1 -0
- data/tests/aws/requests/auto_scaling/tag_tests.rb +1 -0
- data/tests/aws/requests/compute/instance_tests.rb +2 -0
- data/tests/aws/requests/compute/volume_tests.rb +8 -0
- data/tests/aws/requests/storage/object_tests.rb +18 -1
- data/tests/aws/requests/storage/versioning_tests.rb +70 -0
- data/tests/brightbox/compute_tests.rb +96 -4
- data/tests/brightbox/models/compute/account_tests.rb +15 -0
- data/tests/brightbox/oauth2_tests.rb +103 -0
- data/tests/brightbox/requests/compute/account_tests.rb +9 -2
- data/tests/brightbox/requests/compute/interface_tests.rb +18 -4
- data/tests/dns/models/record_tests.rb +17 -3
- data/tests/openstack/requests/compute/address_tests.rb +22 -19
- data/tests/openstack/requests/compute/flavor_tests.rb +4 -2
- data/tests/openstack/requests/compute/limit_tests.rb +60 -0
- data/tests/openstack/requests/compute/quota_tests.rb +16 -3
- data/tests/openstack/requests/compute/security_group_tests.rb +1 -1
- data/tests/rackspace/models/compute_v2/servers_tests.rb +6 -0
- data/tests/rackspace/models/storage/file_tests.rb +172 -0
- data/tests/rackspace/requests/dns/helper.rb +12 -26
- data/tests/vsphere/compute_tests.rb +3 -3
- data/tests/vsphere/models/compute/server_tests.rb +1 -2
- data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +5 -13
- data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -2
- metadata +59 -11
- data/lib/fog/vsphere/requests/compute/datacenters.rb +0 -34
- data/lib/fog/vsphere/requests/compute/find_vm_by_ref.rb +0 -41
- data/lib/fog/vsphere/requests/compute/vm_create.rb +0 -97
- data/tests/vsphere/requests/compute/find_vm_by_ref_tests.rb +0 -26
- data/tests/vsphere/requests/compute/vm_create_tests.rb +0 -20
@@ -9,6 +9,7 @@ First off, high five for coming to visit this page. You are my new hero.
|
|
9
9
|
|
10
10
|
* Organize your patches by keeping all related changes together in a topic branch.
|
11
11
|
* Rebase your branch against master before submitting a pull request (and squish any 'oops' or work in progress commits).
|
12
|
+
* Ensure your changes work with both Ruby 1.8.7 and 1.9! We support both!
|
12
13
|
* Submit changes as pull requests describing what the changes should cover and referencing issues (if any).
|
13
14
|
* Use 'tags' in your commits to indicate the scope, so things like '\[aws|compute\] fixed something'.
|
14
15
|
* Write and run tests. Tests should follow through usage workflows and ought to pass both with mocking on and off.
|
data/docs/dns/index.markdown
CHANGED
@@ -76,4 +76,4 @@ If you already have an account with another service you can just as easily use t
|
|
76
76
|
|
77
77
|
## Go Forth and Resolve
|
78
78
|
|
79
|
-
|
79
|
+
Using this makes it easier to give yourself shortcuts to your cloud servers and manage how clients and users access them as well. It is great to have this flexibility so that you can modify your cloud infrastructure as needed while keeping everything ship shape. It also provides a nice way to create custom subdomains for users and just generally round out your cloud solution.
|
data/docs/index.markdown
CHANGED
@@ -42,10 +42,15 @@ geemus says: "That should give you everything you need to get started, but let m
|
|
42
42
|
|
43
43
|
## Contributing
|
44
44
|
|
45
|
-
* Find something you would like to work on.
|
45
|
+
* Find something you would like to work on.
|
46
|
+
* Look for anything you can help with in the [issue tracker](https://github.com/fog/fog/issues).
|
47
|
+
* Look at the [code quality metrics](https://codeclimate.com/github/fog/fog) for anything you can help clean up.
|
48
|
+
* Or anything else!
|
46
49
|
* Fork the project and do your work in a topic branch.
|
50
|
+
* Make sure your changes will work on both Ruby 1.8.7 and Ruby 1.9.
|
51
|
+
* Add a config at `tests/.fog` for the component you want to test.
|
47
52
|
* Add shindo tests to prove your code works and run all the tests using `bundle exec rake`.
|
48
|
-
* Rebase your branch against fog/fog to make sure everything is up to date.
|
53
|
+
* Rebase your branch against `fog/fog` to make sure everything is up to date.
|
49
54
|
* Commit your changes and send a pull request.
|
50
55
|
|
51
56
|
## Resources
|
@@ -53,7 +58,7 @@ geemus says: "That should give you everything you need to get started, but let m
|
|
53
58
|
Enjoy, and let me know what I can do to continue improving fog!
|
54
59
|
|
55
60
|
* Work through the [fog tutorial](https://github.com/downloads/geemus/learn_fog/learn_fog.tar.gz)
|
56
|
-
* Read fog's
|
61
|
+
* Read fog's API documentation [master branch](http://rubydoc.info/github/fog/fog) or [latest gem release](http://rubydoc.info/gems/fog)
|
57
62
|
* Stay up to date by following [@fog](http://twitter.com/fog) and/or [@geemus](http://twitter.com/geemus) on Twitter.
|
58
63
|
* Get and give help on the [#ruby-fog](irc://irc.freenode.net/ruby-fog) irc channel on Freenode
|
59
64
|
* Follow release notes and discussions on the [mailing list](http://groups.google.com/group/ruby-fog)
|
data/fog.gemspec
CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
|
|
6
6
|
## If your rubyforge_project name is different, then edit it and comment out
|
7
7
|
## the sub! line in the Rakefile
|
8
8
|
s.name = 'fog'
|
9
|
-
s.version = '1.
|
10
|
-
s.date = '2012-
|
9
|
+
s.version = '1.8.0'
|
10
|
+
s.date = '2012-12-01'
|
11
11
|
s.rubyforge_project = 'fog'
|
12
12
|
|
13
13
|
|
@@ -56,7 +56,7 @@ Gem::Specification.new do |s|
|
|
56
56
|
s.add_development_dependency('jekyll')
|
57
57
|
s.add_development_dependency('rake')
|
58
58
|
s.add_development_dependency('rbvmomi')
|
59
|
-
s.add_development_dependency('
|
59
|
+
s.add_development_dependency('yard')
|
60
60
|
s.add_development_dependency('thor')
|
61
61
|
s.add_development_dependency('rspec', '~>1.3.1')
|
62
62
|
s.add_development_dependency('rbovirt', '>=0.0.11')
|
data/lib/fog.rb
CHANGED
data/lib/fog/aws/auto_scaling.rb
CHANGED
@@ -258,7 +258,7 @@ module Fog
|
|
258
258
|
setup_credentials(options)
|
259
259
|
@region = options[:region] || 'us-east-1'
|
260
260
|
|
261
|
-
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
261
|
+
unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
262
262
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
263
263
|
end
|
264
264
|
end
|
data/lib/fog/aws/cloud_watch.rb
CHANGED
@@ -55,7 +55,7 @@ module Fog
|
|
55
55
|
|
56
56
|
@region = options[:region] || 'us-east-1'
|
57
57
|
|
58
|
-
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
58
|
+
unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
59
59
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
60
60
|
end
|
61
61
|
end
|
data/lib/fog/aws/compute.rb
CHANGED
@@ -113,6 +113,7 @@ module Fog
|
|
113
113
|
request :modify_instance_attribute
|
114
114
|
request :modify_network_interface_attribute
|
115
115
|
request :modify_snapshot_attribute
|
116
|
+
request :modify_volume_attribute
|
116
117
|
request :purchase_reserved_instances_offering
|
117
118
|
request :reboot_instances
|
118
119
|
request :release_address
|
@@ -220,7 +221,7 @@ module Fog
|
|
220
221
|
setup_credentials(options)
|
221
222
|
@region = options[:region] || 'us-east-1'
|
222
223
|
|
223
|
-
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
|
224
|
+
unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
|
224
225
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
225
226
|
end
|
226
227
|
end
|
data/lib/fog/aws/dynamodb.rb
CHANGED
@@ -76,41 +76,30 @@ module Fog
|
|
76
76
|
# * DynamoDB object with connection to aws
|
77
77
|
def initialize(options={})
|
78
78
|
@use_iam_profile = options[:use_iam_profile]
|
79
|
-
|
79
|
+
@region = options[:region] || 'us-east-1'
|
80
80
|
|
81
81
|
setup_credentials(options)
|
82
|
-
|
82
|
+
|
83
83
|
@connection_options = options[:connection_options] || {}
|
84
|
-
|
85
|
-
options[:
|
86
|
-
@host = options[:host] || "dynamodb.#{options[:region]}.amazonaws.com"
|
84
|
+
|
85
|
+
@host = options[:host] || "dynamodb.#{@region}.amazonaws.com"
|
87
86
|
@path = options[:path] || '/'
|
88
87
|
@persistent = options[:persistent] || false
|
89
88
|
@port = options[:port] || '80' #443
|
90
89
|
@scheme = options[:scheme] || 'http' #'https'
|
90
|
+
|
91
91
|
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
|
92
92
|
end
|
93
93
|
|
94
94
|
private
|
95
95
|
|
96
96
|
def setup_credentials(options)
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
sts = Fog::AWS::STS.new(
|
104
|
-
:aws_access_key_id => options[:aws_access_key_id],
|
105
|
-
:aws_secret_access_key => options[:aws_secret_access_key]
|
106
|
-
)
|
107
|
-
session_data = sts.get_session_token.body
|
108
|
-
|
109
|
-
@aws_access_key_id = session_data['AccessKeyId']
|
110
|
-
@aws_secret_access_key = session_data['SecretAccessKey']
|
111
|
-
@aws_session_token = session_data['SessionToken']
|
112
|
-
end
|
113
|
-
@hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
|
97
|
+
@aws_access_key_id = options[:aws_access_key_id]
|
98
|
+
@aws_secret_access_key = options[:aws_secret_access_key]
|
99
|
+
@aws_session_token = options[:aws_session_token]
|
100
|
+
@aws_credentials_expire_at = options[:aws_credentials_expire_at]
|
101
|
+
|
102
|
+
@signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key, @region, 'dynamodb')
|
114
103
|
end
|
115
104
|
|
116
105
|
def reload
|
@@ -119,25 +108,27 @@ module Fog
|
|
119
108
|
|
120
109
|
def request(params)
|
121
110
|
refresh_credentials_if_expired
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
headers['x-amzn-authorization'] = signed_authorization_header(params, headers)
|
131
|
-
|
132
|
-
response = @connection.request({
|
133
|
-
:body => params[:body],
|
134
|
-
:expects => 200,
|
135
|
-
:headers => headers,
|
136
|
-
:host => @host,
|
137
|
-
:idempotent => idempotent,
|
138
|
-
:method => 'POST',
|
111
|
+
|
112
|
+
# defaults for all dynamodb requests
|
113
|
+
params.merge!({
|
114
|
+
:expects => 200,
|
115
|
+
:host => @host,
|
116
|
+
:method => :post,
|
117
|
+
:path => '/'
|
139
118
|
})
|
140
119
|
|
120
|
+
# setup headers and sign with signature v4
|
121
|
+
date = Fog::Time.now
|
122
|
+
params[:headers] = {
|
123
|
+
'Content-Type' => 'application/x-amz-json-1.0',
|
124
|
+
'Date' => date.to_iso8601_basic,
|
125
|
+
'Host' => @host,
|
126
|
+
}.merge!(params[:headers])
|
127
|
+
params[:headers]['x-amz-security-token'] = @aws_session_token if @aws_session_token
|
128
|
+
params[:headers]['Authorization'] = @signer.sign(params, date)
|
129
|
+
|
130
|
+
response = @connection.request(params)
|
131
|
+
|
141
132
|
unless response.body.empty?
|
142
133
|
response.body = Fog::JSON.decode(response.body)
|
143
134
|
end
|
@@ -145,31 +136,6 @@ module Fog
|
|
145
136
|
response
|
146
137
|
end
|
147
138
|
|
148
|
-
def signed_authorization_header(params, headers)
|
149
|
-
string_to_sign = "POST\n/\n\nhost:#{@host}:#{@port}\n"
|
150
|
-
|
151
|
-
amz_headers, canonical_amz_headers = {}, ''
|
152
|
-
for key, value in headers
|
153
|
-
if key[0..5] == 'x-amz-'
|
154
|
-
amz_headers[key] = value
|
155
|
-
end
|
156
|
-
end
|
157
|
-
amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
|
158
|
-
for key, value in amz_headers
|
159
|
-
canonical_amz_headers << "#{key}:#{value}\n"
|
160
|
-
end
|
161
|
-
string_to_sign << canonical_amz_headers
|
162
|
-
string_to_sign << "\n"
|
163
|
-
string_to_sign << (params[:body] || '')
|
164
|
-
|
165
|
-
string_to_sign = OpenSSL::Digest::SHA256.digest(string_to_sign)
|
166
|
-
|
167
|
-
signed_string = @hmac.sign(string_to_sign)
|
168
|
-
signature = Base64.encode64(signed_string).chomp!
|
169
|
-
|
170
|
-
"AWS3 AWSAccessKeyId=#{@aws_access_key_id},Algorithm=HmacSHA256,Signature=#{signature}"
|
171
|
-
end
|
172
|
-
|
173
139
|
end
|
174
140
|
end
|
175
141
|
end
|
data/lib/fog/aws/elb.rb
CHANGED
@@ -81,7 +81,7 @@ module Fog
|
|
81
81
|
|
82
82
|
@region = options[:region] || 'us-east-1'
|
83
83
|
|
84
|
-
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
84
|
+
unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
|
85
85
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
86
86
|
end
|
87
87
|
end
|
data/lib/fog/aws/glacier.rb
CHANGED
data/lib/fog/aws/iam.rb
CHANGED
@@ -41,7 +41,9 @@ module Fog
|
|
41
41
|
when *@contexts
|
42
42
|
@context.pop
|
43
43
|
when 'code'
|
44
|
-
@instance[@context.last][name] = value.to_i
|
44
|
+
@instance[@context.last][name] = @context.last == 'stateReason' ? value : value.to_i
|
45
|
+
when 'message'
|
46
|
+
@instance[@context.last][name] = value
|
45
47
|
when 'deleteOnTermination'
|
46
48
|
@block_device_mapping[name] = (value == 'true')
|
47
49
|
when 'deviceName', 'status', 'volumeId'
|
@@ -12,7 +12,7 @@ module Fog
|
|
12
12
|
|
13
13
|
def end_element(name)
|
14
14
|
case name
|
15
|
-
when 'availabilityZone', 'currencyCode', 'instanceType', 'instanceTenancy', 'productDescription', 'reservedInstancesOfferingId'
|
15
|
+
when 'availabilityZone', 'currencyCode', 'instanceType', 'offeringType', 'instanceTenancy', 'productDescription', 'reservedInstancesOfferingId'
|
16
16
|
@reserved_instances_offering[name] = value
|
17
17
|
when 'duration'
|
18
18
|
@reserved_instances_offering[name] = value.to_i
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Fog
|
2
|
+
module Parsers
|
3
|
+
module Storage
|
4
|
+
module AWS
|
5
|
+
|
6
|
+
class DeleteMultipleObjects < Fog::Parsers::Base
|
7
|
+
|
8
|
+
def reset
|
9
|
+
@deleted = { 'Deleted' => {} }
|
10
|
+
@error = { 'Error' => {} }
|
11
|
+
@response = { 'DeleteResult' => [] }
|
12
|
+
end
|
13
|
+
|
14
|
+
def start_element(name, attrs = [])
|
15
|
+
super
|
16
|
+
case name
|
17
|
+
when 'Deleted'
|
18
|
+
@in_deleted = true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def end_element(name)
|
23
|
+
case name
|
24
|
+
when 'Deleted'
|
25
|
+
@response['DeleteResult'] << @deleted
|
26
|
+
@deleted = { 'Deleted' => {} }
|
27
|
+
@in_deleted = false
|
28
|
+
when 'Error'
|
29
|
+
@response['DeleteResult'] << @error
|
30
|
+
@error = { 'Error' => {} }
|
31
|
+
when 'Key', 'VersionId'
|
32
|
+
if @in_deleted
|
33
|
+
@deleted['Deleted'][name] = value
|
34
|
+
else
|
35
|
+
@error['Error'][name] = value
|
36
|
+
end
|
37
|
+
when 'DeleteMarker', 'DeletemarkerVersionId'
|
38
|
+
@deleted['Deleted'][name] = value
|
39
|
+
when 'Code', 'Message'
|
40
|
+
@error['Error'][name] = value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
data/lib/fog/aws/rds.rb
CHANGED
@@ -101,7 +101,7 @@ module Fog
|
|
101
101
|
@use_iam_profile = options[:use_iam_profile]
|
102
102
|
@region = options[:region] || 'us-east-1'
|
103
103
|
|
104
|
-
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
|
104
|
+
unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
|
105
105
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
106
106
|
end
|
107
107
|
|
@@ -158,7 +158,7 @@ module Fog
|
|
158
158
|
end
|
159
159
|
|
160
160
|
def owner_id
|
161
|
-
@owner_id ||=
|
161
|
+
@owner_id ||= security_groups.get('default').owner_id
|
162
162
|
end
|
163
163
|
|
164
164
|
def reload
|
@@ -71,6 +71,9 @@ module Fog
|
|
71
71
|
|
72
72
|
{"messageSet" => [], "regionName" => "ap-southeast-1", "zoneName" => "ap-southeast-1a", "zoneState" => "available"},
|
73
73
|
{"messageSet" => [], "regionName" => "ap-southeast-1", "zoneName" => "ap-southeast-1b", "zoneState" => "available"},
|
74
|
+
|
75
|
+
{"messageSet" => [], "regionName" => "ap-southeast-2", "zoneName" => "ap-southeast-2a", "zoneState" => "available"},
|
76
|
+
{"messageSet" => [], "regionName" => "ap-southeast-2", "zoneName" => "ap-southeast-2b", "zoneState" => "available"},
|
74
77
|
]
|
75
78
|
|
76
79
|
availability_zone_info = all_zones.select { |zoneinfo| zoneinfo["regionName"] == @region }
|
@@ -18,7 +18,9 @@ module Fog
|
|
18
18
|
# * 'availabilityZone'<~String> - availability zone of offering
|
19
19
|
# * 'duration'<~Integer> - duration, in seconds, of offering
|
20
20
|
# * 'fixedPrice'<~Float> - purchase price of offering
|
21
|
+
# * 'includeMarketplace'<~Boolean> - whether or not to include marketplace offerings
|
21
22
|
# * 'instanceType'<~String> - instance type of offering
|
23
|
+
# * 'offeringType'<~String> - type of offering, in ['Heavy Utilization', 'Medium Utilization', 'Light Utilization']
|
22
24
|
# * 'productDescription'<~String> - description of offering
|
23
25
|
# * 'reservedInstancesOfferingId'<~String> - id of offering
|
24
26
|
# * 'usagePrice'<~Float> - usage price of offering, per hour
|
@@ -41,14 +43,15 @@ module Fog
|
|
41
43
|
|
42
44
|
self.data[:reserved_instances_offerings] ||= [{
|
43
45
|
'reservedInstancesOfferingId' => Fog::AWS::Mock.reserved_instances_offering_id,
|
44
|
-
'instanceType'
|
45
|
-
'availabilityZone'
|
46
|
-
'duration'
|
47
|
-
'fixedPrice'
|
48
|
-
'
|
49
|
-
'
|
50
|
-
'
|
51
|
-
'
|
46
|
+
'instanceType' => 'm1.small',
|
47
|
+
'availabilityZone' => 'us-east-1d',
|
48
|
+
'duration' => 31536000,
|
49
|
+
'fixedPrice' => 350.0,
|
50
|
+
'offeringType' => 'Medium Utilization',
|
51
|
+
'usagePrice' => 0.03,
|
52
|
+
'productDescription' => 'Linux/UNIX',
|
53
|
+
'instanceTenancy' => 'default',
|
54
|
+
'currencyCode' => 'USD'
|
52
55
|
}]
|
53
56
|
|
54
57
|
response.body = {
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AWS
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/compute/basic'
|
7
|
+
|
8
|
+
# Modifies a volume attribute.
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * volume_id<~String> - The ID of the volume.
|
12
|
+
# * auto_enable_io_value<~Boolean> - This attribute exists to auto-enable the I/O operations to the volume.
|
13
|
+
#
|
14
|
+
# ==== Returns
|
15
|
+
# * response<~Excon::Response>:
|
16
|
+
# * body<~Hash>:
|
17
|
+
# * 'requestId'<~String> - Id of request
|
18
|
+
# * 'return'<~Boolean> - success?
|
19
|
+
#
|
20
|
+
# {Amazon API Reference}[http://http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyVolumeAttribute.html]
|
21
|
+
def modify_volume_attribute(volume_id=nil, auto_enable_io_value=false)
|
22
|
+
request(
|
23
|
+
'Action' => 'ModifyVolumeAttribute',
|
24
|
+
'VolumeId' => volume_id,
|
25
|
+
'AutoEnableIO.Value' => auto_enable_io_value,
|
26
|
+
:idempotent => true,
|
27
|
+
:parser => Fog::Parsers::Compute::AWS::Basic.new
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class Mock
|
34
|
+
|
35
|
+
def modify_volume_attribute(volume_id=nil, auto_enable_io_value=false)
|
36
|
+
response = Excon::Response.new
|
37
|
+
if volume = self.data[:volumes][volume_id]
|
38
|
+
response.status = 200
|
39
|
+
response.body = {
|
40
|
+
'requestId' => Fog::AWS::Mock.request_id,
|
41
|
+
'return' => true
|
42
|
+
}
|
43
|
+
response
|
44
|
+
else
|
45
|
+
raise Fog::Compute::AWS::NotFound.new("The volume '#{volume_id}' does not exist.")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|