azure-armrest 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: defac8d47729576388ef8ee13366182f5d2ba617
4
- data.tar.gz: 226dd08875b1bcee85ce4ada88c0d31653a7c0d5
3
+ metadata.gz: 198f8903222b20b0bbea81928db29aab7436dbae
4
+ data.tar.gz: 25a4b584d105a275782a32635e69faa78e6d6250
5
5
  SHA512:
6
- metadata.gz: a111aa4f81c3a43699a5f39f78cbbadbc84361d18a58d40e4e5f803ad1ab2b90daa22d261ce3f58241ad787cd5c01c2678b91ec70ef977c6078d93bc74359ad1
7
- data.tar.gz: 90cc8169495c37470eee3bc75b93fb907b93aa15a4a8f2c67c6cae34af5543b353a576f337f207f8c5da040a2ca4c4bf16e37a5bf92bb6821030c3669ad6b6bd
6
+ metadata.gz: d6c3ab976bc6b91665dafccfcfc5e317023c9feddeb61ec580764fe07858d095be9cb8bb8d715c8c4cf53ec589ae76b8cb6657f759152a014f11c729a0f0d11e
7
+ data.tar.gz: 9023b4532602c882d34282208cf4941b7cf5bd130e641d7da11b3c8fdca5235a075df763454bded12bc389df91ebd21aa0b4185dfa45ca3a2ff2bc2c9b17beb4
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ = 0.0.8 - 10-Nov-2015
2
+ * Added the list_private_images method to the StorageAccountService class.
3
+ * Added the list_all method to the ResourceGroupService class.
4
+ * Removed the EventService class for now. It did not actually work, and will
5
+ eventually be re-implemented as part of a group of Insights classes.
6
+ * Added a .to_h and .to_hash method for the BaseModel class.
7
+
1
8
  = 0.0.7 - 5-Nov-2015
2
9
  * Refactored our BaseModel class so that it no longer uses Delegate or OpenStruct.
3
10
  * Added more methods to the StorageAccount model, and modified methods so that
@@ -20,7 +20,7 @@ behind the scenes.
20
20
  EOF
21
21
 
22
22
  spec.add_dependency 'json'
23
- spec.add_dependency 'rest-client', '=2.0.0.rc1'
23
+ spec.add_dependency 'rest-client', '~> 2.0.0.rc'
24
24
  spec.add_dependency 'cache_method', '~> 0.2.7'
25
25
  spec.add_dependency 'azure-signature', '~> 0.2.0'
26
26
  spec.add_dependency 'activesupport', '>= 1.2.0'
data/lib/azure/armrest.rb CHANGED
@@ -29,7 +29,6 @@ require 'azure/armrest/availability_set_service'
29
29
  require 'azure/armrest/virtual_machine_service'
30
30
  require 'azure/armrest/virtual_machine_image_service'
31
31
  require 'azure/armrest/virtual_machine_extension_service'
32
- require 'azure/armrest/event_service'
33
32
  require 'azure/armrest/template_deployment_service'
34
33
  require 'azure/armrest/resource_service'
35
34
  require 'azure/armrest/resource_group_service'
@@ -54,14 +54,14 @@ module Azure
54
54
  end
55
55
 
56
56
  if json.is_a?(Hash)
57
- hash = json
57
+ @hash = json
58
58
  @json = json.to_json
59
59
  else
60
- hash = JSON.parse(json)
60
+ @hash = JSON.parse(json)
61
61
  @json = json
62
62
  end
63
63
 
64
- __setobj__(hash)
64
+ __setobj__(@hash.dup)
65
65
  end
66
66
 
67
67
  def resource_group
@@ -72,6 +72,14 @@ module Azure
72
72
  @resource_group = rg
73
73
  end
74
74
 
75
+ def to_h
76
+ @hash
77
+ end
78
+
79
+ def to_hash
80
+ @hash
81
+ end
82
+
75
83
  def to_json
76
84
  @json
77
85
  end
@@ -10,6 +10,7 @@ module Azure
10
10
  class ContainerProperty < BaseModel; end
11
11
  class Blob < BaseModel; end
12
12
  class BlobProperty < BaseModel; end
13
+ class PrivateImage < BlobProperty; end
13
14
  class BlobServiceProperty < BaseModel; end
14
15
  class BlobServiceStat < BaseModel; end
15
16
  class BlobMetadata < BaseModel; end
@@ -95,9 +96,8 @@ module Azure
95
96
  doc = Nokogiri::XML(response.body)
96
97
 
97
98
  doc.xpath('//Blobs/Blob').map do |node|
98
- blob = Blob.new(Hash.from_xml(node.to_s)['Blob'])
99
- blob[:container] = container
100
- blob
99
+ hash = Hash.from_xml(node.to_s)['Blob'].merge(:container => container)
100
+ Blob.new(hash)
101
101
  end
102
102
  end
103
103
 
@@ -47,13 +47,32 @@ module Azure
47
47
  response = rest_get(build_url)
48
48
  JSON.parse(response)["value"]
49
49
  end
50
+
50
51
  private :_list
51
52
 
52
- # Cannot directly cache list method, because Marshal used by chche_method
53
- # cannot dump anonymous class, including the ones derived from Azure::Armrest::BaseModel
54
- # Same applies to other cached methods in this class
53
+ # Cannot directly cache list method, because Marshal used by cache_method
54
+ # cannot dump anonymous classes, including the ones derived from
55
+ # Azure::Armrest::BaseModel.
56
+ #
57
+ # The same applies to other cached methods in this class.
55
58
  cache_method(:_list, cache_time)
56
59
 
60
+ # List all the providers for Azure. This may include results that are
61
+ # not available for the current subscription.
62
+ #
63
+ def list_all
64
+ _list_all.map{ |hash| Azure::Armrest::ResourceProvider.new(hash) }
65
+ end
66
+
67
+ def _list_all
68
+ url = File.join(Azure::Armrest::RESOURCE, 'providers')
69
+ url << "?api-version=#{@api_version}"
70
+ response = rest_get(url)
71
+ JSON.parse(response)['value']
72
+ end
73
+
74
+ cache_method(:_list_all, cache_time)
75
+
57
76
  # Return information about a specific +namespace+ provider. The results
58
77
  # of this method are cached.
59
78
  #
@@ -65,6 +84,7 @@ module Azure
65
84
  url = build_url(namespace)
66
85
  rest_get(url).body
67
86
  end
87
+
68
88
  private :_get
69
89
 
70
90
  cache_method(:_get, cache_time)
@@ -70,7 +70,6 @@ module Azure
70
70
  end
71
71
  end
72
72
 
73
-
74
73
  # Returns the primary and secondary access keys for the given
75
74
  # storage account as a hash.
76
75
  #
@@ -98,6 +97,49 @@ module Azure
98
97
  JSON.parse(response)
99
98
  end
100
99
 
100
+ # Returns a list of images that are available for provisioning for all
101
+ # storage accounts in the provided resource group. The custom keys
102
+ # :uri and :operating_system have been added for convenience.
103
+ #
104
+ def list_private_images(group = armrest_configuration.resource_group)
105
+ results = []
106
+ threads = []
107
+ mutex = Mutex.new
108
+
109
+ list(group).each do |lstorage_account|
110
+ threads << Thread.new(lstorage_account) do |storage_account|
111
+ key = list_account_keys(storage_account.name, group).fetch('key1')
112
+
113
+ storage_account.all_blobs(key).each do |blob|
114
+ next unless File.extname(blob.name).downcase == '.vhd'
115
+ next unless blob.properties.lease_state.downcase == 'available'
116
+
117
+ blob_properties = storage_account.blob_properties(blob.container, blob.name, key)
118
+ next unless blob_properties.respond_to?(:x_ms_meta_microsoftazurecompute_osstate)
119
+ next unless blob_properties.x_ms_meta_microsoftazurecompute_osstate.downcase == 'generalized'
120
+
121
+ mutex.synchronize do
122
+ hash = blob.to_h.merge(
123
+ :storage_account => storage_account.to_h,
124
+ :blob_properties => blob_properties.to_h,
125
+ :operating_system => blob_properties.try(:x_ms_meta_microsoftazurecompute_ostype),
126
+ :uri => File.join(
127
+ storage_account.properties.primary_endpoints.blob,
128
+ blob.container,
129
+ blob.name
130
+ )
131
+ )
132
+ results << StorageAccount::PrivateImage.new(hash)
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ threads.each(&:join)
139
+
140
+ results.flatten
141
+ end
142
+
101
143
  private
102
144
 
103
145
  def validate_account_type(account_type)
@@ -1,5 +1,5 @@
1
1
  module Azure
2
2
  module Armrest
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azure-armrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-11-06 00:00:00.000000000 Z
14
+ date: 2015-11-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
@@ -31,16 +31,16 @@ dependencies:
31
31
  name: rest-client
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - '='
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 2.0.0.rc1
36
+ version: 2.0.0.rc
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '='
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 2.0.0.rc1
43
+ version: 2.0.0.rc
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: cache_method
46
46
  requirement: !ruby/object:Gem::Requirement
@@ -193,7 +193,6 @@ files:
193
193
  - lib/azure/armrest.rb
194
194
  - lib/azure/armrest/armrest_service.rb
195
195
  - lib/azure/armrest/availability_set_service.rb
196
- - lib/azure/armrest/event_service.rb
197
196
  - lib/azure/armrest/exception.rb
198
197
  - lib/azure/armrest/model/base_model.rb
199
198
  - lib/azure/armrest/model/storage_account.rb
@@ -1,32 +0,0 @@
1
- module Azure
2
- module Armrest
3
- class EventService < ArmrestService
4
-
5
- def initialize(armrest_configuration, _options = {})
6
- super
7
-
8
- @base_url += "providers/microsoft.insights/eventtypes/management/values"
9
- @base_url += "?api-version=#{armrest_configuration.api_version}"
10
- end
11
-
12
- # check what data type the event channel is
13
-
14
- def get_rg_events(starttime, endtime, channels, rg_name )
15
- @uri += build_filter += " and resourceGroupName eq '#{rg_name}'"
16
- end
17
-
18
- def get_resource_events(starttime, endtime, channels, resource_uri )
19
- @uri += build_filter += " and resourceUri eq '#{resource_uri}'"
20
- end
21
-
22
- def build_filter(starttime, endtime, channels)
23
- "$filter=eventTimestamp ge '#{starttime}' and eventTimestamp le '#{endtime}'
24
- and eventChannels eq '#{channels}'"
25
- end
26
-
27
- def select_properties(property_names)
28
- "&$select={property_names}"
29
- end
30
- end
31
- end
32
- end