fog-azure 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/CONTRIBUTING.md +18 -0
  4. data/CONTRIBUTORS.md +4 -0
  5. data/Gemfile +25 -0
  6. data/LICENSE.md +19 -0
  7. data/README.md +31 -0
  8. data/Rakefile +29 -0
  9. data/fog-azure.gemspec +51 -0
  10. data/lib/fog/azure.rb +29 -0
  11. data/lib/fog/azure/compute.rb +85 -0
  12. data/lib/fog/azure/core.rb +29 -0
  13. data/lib/fog/azure/docs/getting_started.md +164 -0
  14. data/lib/fog/azure/models/compute/image.rb +35 -0
  15. data/lib/fog/azure/models/compute/images.rb +51 -0
  16. data/lib/fog/azure/models/compute/server.rb +189 -0
  17. data/lib/fog/azure/models/compute/servers.rb +67 -0
  18. data/lib/fog/azure/models/compute/storage_account.rb +71 -0
  19. data/lib/fog/azure/models/compute/storage_accounts.rb +52 -0
  20. data/lib/fog/azure/requests/compute/create_storage_account.rb +43 -0
  21. data/lib/fog/azure/requests/compute/create_virtual_machine.rb +37 -0
  22. data/lib/fog/azure/requests/compute/delete_storage_account.rb +38 -0
  23. data/lib/fog/azure/requests/compute/delete_virtual_machine.rb +38 -0
  24. data/lib/fog/azure/requests/compute/get_storage_account.rb +37 -0
  25. data/lib/fog/azure/requests/compute/list_images.rb +43 -0
  26. data/lib/fog/azure/requests/compute/list_storage_accounts.rb +43 -0
  27. data/lib/fog/azure/requests/compute/list_virtual_machines.rb +56 -0
  28. data/lib/fog/azure/requests/compute/reboot_server.rb +38 -0
  29. data/lib/fog/azure/requests/compute/shutdown_server.rb +38 -0
  30. data/lib/fog/azure/requests/compute/start_server.rb +38 -0
  31. data/lib/fog/azure/version.rb +26 -0
  32. data/lib/fog/bin/azure.rb +84 -0
  33. data/tests/azure_test_helper.rb +84 -0
  34. data/tests/helper.rb +36 -0
  35. data/tests/helpers/mock_helper.rb +36 -0
  36. data/tests/models/compute/image_tests.rb +50 -0
  37. data/tests/models/compute/server_tests.rb +84 -0
  38. data/tests/models/compute/storage_account_tests.rb +51 -0
  39. data/tests/requests/compute/images_tests.rb +40 -0
  40. data/tests/requests/compute/servers_tests.rb +41 -0
  41. data/tests/requests/compute/storage_accounts_tests.rb +41 -0
  42. metadata +173 -0
@@ -0,0 +1,26 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ module Fog
23
+ module AZURE
24
+ VERSION = "0.0.1"
25
+ end
26
+ end
@@ -0,0 +1,84 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ module Azure # deviates from other bin stuff to accomodate gem
23
+ class << self
24
+ def class_for(key)
25
+ case key
26
+ when :compute
27
+ Fog::Compute::Azure
28
+ else
29
+ raise ArgumentError, "Unrecognized service: #{key}"
30
+ end
31
+ end
32
+
33
+ def [](service)
34
+ @@connections ||= Hash.new do |hash, key|
35
+ hash[key] = case key
36
+ when :compute
37
+ Fog::Logger.warning("Azure[:compute] is not recommended, use Compute[:azure] for portability")
38
+ Fog::Compute.new(:provider => 'Azure')
39
+ else
40
+ raise ArgumentError, "Unrecognized service: #{key.inspect}"
41
+ end
42
+ end
43
+ @@connections[service]
44
+ end
45
+
46
+ def available?
47
+ availability = true
48
+ for service in services
49
+ begin
50
+ service = self.class_for(service)
51
+ availability &&= service.requirements.all? { |requirement| Fog.credentials.include?(requirement) }
52
+ rescue ArgumentError => e
53
+ Fog::Logger.warning(e.message)
54
+ availability = false
55
+ rescue => e
56
+ availability = false
57
+ end
58
+ end
59
+
60
+ if availability
61
+ for service in services
62
+ for collection in self.class_for(service).collections
63
+ unless self.respond_to?(collection)
64
+ self.class_eval <<-EOS, __FILE__, __LINE__
65
+ def self.#{collection}
66
+ self[:#{service}].#{collection}
67
+ end
68
+ EOS
69
+ end
70
+ end
71
+ end
72
+ end
73
+ availability
74
+ end
75
+
76
+ def collections
77
+ services.map {|service| self[service].collections}.flatten.sort_by {|service| service.to_s}
78
+ end
79
+
80
+ def services
81
+ Fog::Azure.services
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,84 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ def azure_service
24
+ Fog::Compute[:azure]
25
+ end
26
+
27
+ def vm_attributes
28
+ image = azure_service.images.select{|image| image.os_type == "Linux"}.first
29
+ location = image.locations.split(";").first
30
+
31
+ {
32
+ :image => image.name,
33
+ :location => location,
34
+ :vm_name => vm_name,
35
+ :vm_user => "foguser",
36
+ :password => "ComplexPassword!123",
37
+ :storage_account_name => storage_name
38
+ }
39
+ end
40
+
41
+ def vm_name
42
+ "fog-test-server"
43
+ end
44
+
45
+ def storage_name
46
+ "fogteststorageaccount"
47
+ end
48
+
49
+ def fog_server
50
+ server = azure_service.servers.select { |s| s.vm_name == vm_name }.first
51
+ unless server
52
+ server = azure_service.servers.create(
53
+ vm_attributes
54
+ )
55
+ end
56
+ server
57
+ end
58
+
59
+ def storage_account
60
+ storage = azure_service.storage_accounts.select { |s| s.name == storage_name }.first
61
+ unless storage
62
+ storage = azure_service.storage_accounts.create(
63
+ {:name => storage_name, :location => "West US"}
64
+ )
65
+ end
66
+ azure_service.storage_accounts.get(storage_name)
67
+ end
68
+
69
+ def vm_destroy
70
+ server = azure_service.servers.select { |s| s.vm_name == vm_name }.first
71
+ server.destroy if server
72
+ end
73
+
74
+ def storage_destroy
75
+ storage = azure_service.storage_accounts.select { |s| s.name == storage_name }.first
76
+ storage.destroy if storage
77
+ end
78
+
79
+ at_exit do
80
+ unless Fog.mocking?
81
+ storage_destroy
82
+ vm_destroy
83
+ end
84
+ end
data/tests/helper.rb ADDED
@@ -0,0 +1,36 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require File.expand_path('../../lib/fog/azure', __FILE__)
24
+
25
+ Bundler.require(:test)
26
+
27
+ Excon.defaults.merge!(:debug_request => true, :debug_response => true)
28
+
29
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helpers', 'mock_helper'))
30
+
31
+ # This overrides the default 600 seconds timeout during live test runs
32
+ if Fog.mocking?
33
+ Fog.timeout = ENV['FOG_TEST_TIMEOUT'] || 2000
34
+ Fog::Logger.warning "Setting default fog timeout to #{Fog.timeout} seconds"
35
+ end
36
+
@@ -0,0 +1,36 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ # Use so you can run in mock mode from the command line
23
+ #
24
+ # FOG_MOCK=true fog
25
+
26
+ if ENV["FOG_MOCK"] == "true"
27
+ Fog.mock!
28
+ end
29
+
30
+ # if in mocked mode, fill in some fake credentials for us
31
+ if Fog.mock?
32
+ Fog.credentials = {
33
+ :azure_sub_id => 'azure_sub_id',
34
+ :azure_pem => 'path_of_pem'
35
+ }.merge(Fog.credentials)
36
+ end
@@ -0,0 +1,50 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ Shindo.tests("Fog::Compute[:azure] | image model", ["azure", "compute"]) do
23
+
24
+ service = Fog::Compute[:azure]
25
+
26
+ tests("The image model should") do
27
+ image = service.images.first
28
+ tests("have the action") do
29
+ test("reload") { image.respond_to? "reload" }
30
+ end
31
+ tests("have attributes") do
32
+ model_attribute_hash = image.attributes
33
+ attributes = [
34
+ :name,
35
+ :os_type
36
+ ]
37
+ tests("The image model should respond to") do
38
+ attributes.each do |attribute|
39
+ test("#{attribute}") { image.respond_to? attribute }
40
+ end
41
+ end
42
+ tests("The attributes hash should have key") do
43
+ attributes.each do |attribute|
44
+ test("#{attribute}") { model_attribute_hash.key? attribute }
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,84 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ Shindo.tests("Fog::Compute[:azure] | server model", ["azure", "compute"]) do
23
+
24
+ server = fog_server
25
+
26
+ tests("The server model should") do
27
+ pending if Fog.mocking?
28
+ tests("have the action") do
29
+ test("reload") { server.respond_to? "reload" }
30
+ %w{
31
+ destroy
32
+ reboot
33
+ shutdown
34
+ start
35
+ }.each do |action|
36
+ test(action) { server.respond_to? action }
37
+ end
38
+ end
39
+
40
+ tests("have attributes") do
41
+ attributes = [
42
+ :vm_name,
43
+ :status,
44
+ :ipaddress,
45
+ :cloud_service_name,
46
+ :image,
47
+ :location,
48
+ :os_type,
49
+ :storage_account_name
50
+ ]
51
+ tests("The server model should respond to") do
52
+ attributes.each do |attribute|
53
+ test("#{attribute}") { server.respond_to? attribute }
54
+ end
55
+ end
56
+ end
57
+
58
+ test("#reboot") do
59
+ server.reboot
60
+ server = fog_server
61
+ %w(ReadyRole Provisioning RoleStateUnknown).include? server.status
62
+ end
63
+
64
+ test("#start") do
65
+ server.start
66
+ server = fog_server
67
+ status = %w(ReadyRole Provisioning RoleStateUnknown)
68
+ status.include? server.status
69
+ end
70
+
71
+ test("#shutdown") do
72
+ server.shutdown
73
+ server = fog_server
74
+ %w(StoppedVM StoppedDeallocated).include? server.status
75
+ end
76
+
77
+ test("#destroy") do
78
+ server.destroy
79
+ server = azure_service.servers.select { |s| s.vm_name == vm_name }.first
80
+ server.nil?
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,51 @@
1
+ # Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+ Shindo.tests("Fog::Compute[:azure] | storage account model", ["azure", "compute"]) do
23
+
24
+ storage = storage_account
25
+
26
+ tests("The storage account model should") do
27
+
28
+ tests("have the action") do
29
+ test("reload") { storage.respond_to? "reload" }
30
+ end
31
+ tests("have attributes") do
32
+ model_attribute_hash = storage.attributes
33
+ attributes = [
34
+ :name,
35
+ :location,
36
+ :status
37
+ ]
38
+ tests("The storage account model should respond to") do
39
+ attributes.each do |attribute|
40
+ test("#{attribute}") { storage.respond_to? attribute }
41
+ end
42
+ end
43
+ tests("The attributes hash should have key") do
44
+ attributes.each do |attribute|
45
+ test("#{attribute}") { model_attribute_hash.key? attribute }
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ end