ansible_tower_client 0.2.0 → 0.3.0

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: 0d07c93de33e2d4030e213e4fbddb7c8f302a7e6
4
- data.tar.gz: 48b627c92d4ce8fc4aa06e3bdfd95ca6786d7962
3
+ metadata.gz: f17e37f15be38fac17b1390b9ad60ef854b457df
4
+ data.tar.gz: ada9722dc153f60e6fdc07b4de9e905e63fb4ccc
5
5
  SHA512:
6
- metadata.gz: d168c39fefdd4640ce3f17fb868280676a855a3704bcaf83e460c1bee27f44570c1c5ccc87c285d7ab5cebaa80e3b615caac12275e3118b25412d094ff530b46
7
- data.tar.gz: a070d079a997df26b3bacfb0668cb43497e77d1243d584669edc1cdcd31f9cc46068a5425ac966c68bb460ef46f7e67dcf61b187a0f3788f37764f03cba4b35b
6
+ metadata.gz: 1b64e64a6f44d0db7db90890a0c7a88d34112b01a941aa676ea67f7bfe6c419d1f9dbb807fa494c1e609396d49a2b8115c8d82cb9323e9de33067da928579542
7
+ data.tar.gz: 6e2364801b7ea833a6a353bae1983371fe3726f21f67dd67f14a18e6e0131133d205513e048b1d2458f57ed857769f8edf2ab352023c4c69556beb409e22d599
@@ -14,6 +14,8 @@ require "ansible_tower_client/ad_hoc_command"
14
14
  require "ansible_tower_client/group"
15
15
  require "ansible_tower_client/host"
16
16
  require "ansible_tower_client/inventory"
17
+ require "ansible_tower_client/inventory_source"
18
+ require "ansible_tower_client/inventory_update"
17
19
  require "ansible_tower_client/job"
18
20
  require "ansible_tower_client/job_template"
19
21
  require "more_core_extensions/all"
@@ -17,6 +17,14 @@ module AnsibleTowerClient
17
17
  Collection.new(self, Inventory)
18
18
  end
19
19
 
20
+ def inventory_sources
21
+ Collection.new(self, InventorySource)
22
+ end
23
+
24
+ def inventory_updates
25
+ Collection.new(self, InventoryUpdate)
26
+ end
27
+
20
28
  def job_templates
21
29
  Collection.new(self, JobTemplate)
22
30
  end
@@ -1,43 +1,57 @@
1
1
  module AnsibleTowerClient
2
2
  class Collection
3
3
  attr_reader :api, :klass
4
- def initialize(api, klass)
4
+ def initialize(api, klass = nil)
5
5
  @api = api
6
6
  @klass = klass
7
7
  end
8
8
 
9
9
  def all
10
- collection_for(api.get(klass.endpoint))
10
+ find_all_by_url(klass.endpoint)
11
11
  end
12
12
 
13
- def collection_for(paginated_result)
14
- body = JSON.parse(paginated_result.body)
15
- results = body["results"]
16
- loop do
17
- break if body["next"].nil?
18
- body = JSON.parse(api.get(body["next"]).body)
19
- results += body["results"]
20
- end
13
+ def find_all_by_url(url)
14
+ Enumerator.new do |yielder|
15
+ @collection = []
16
+ next_page = url
21
17
 
22
- build_collection(results)
18
+ loop do
19
+ next_page = fetch_more_results(next_page) if @collection.empty?
20
+ raise StopIteration if @collection.empty?
21
+ yielder.yield(@collection.shift)
22
+ end
23
+ end
23
24
  end
24
25
 
25
26
  def find(id)
26
- raw_body = JSON.parse(api.get("#{klass.endpoint}/#{id}/").body)
27
- klass.new(api, raw_body)
27
+ build_object(parse_response(api.get("#{klass.endpoint}/#{id}/")))
28
28
  end
29
29
 
30
30
  private
31
31
 
32
- def build_collection(results)
33
- results.collect do |result|
34
- class_from_type(result["type"]).new(api, result)
35
- end
36
- end
37
-
38
32
  def class_from_type(type)
39
33
  camelized = type.split("_").collect(&:capitalize).join
40
34
  AnsibleTowerClient.const_get(camelized)
41
35
  end
36
+
37
+ def fetch_more_results(next_page)
38
+ return if next_page.nil?
39
+ body = parse_response(api.get(next_page))
40
+ parse_result_set(body["results"])
41
+
42
+ body["next"]
43
+ end
44
+
45
+ def parse_response(response)
46
+ JSON.parse(response.body)
47
+ end
48
+
49
+ def parse_result_set(results)
50
+ results.each { |result| @collection << build_object(result) }
51
+ end
52
+
53
+ def build_object(result)
54
+ class_from_type(result["type"]).new(api, result)
55
+ end
42
56
  end
43
57
  end
@@ -5,7 +5,7 @@ module AnsibleTowerClient
5
5
  end
6
6
 
7
7
  def children
8
- self.class.collection_for(api.get(File.join(self.class.endpoint, id.to_s, "children")))
8
+ Collection.new(api).find_all_by_url(related["children"])
9
9
  end
10
10
  end
11
11
  end
@@ -5,7 +5,7 @@ module AnsibleTowerClient
5
5
  end
6
6
 
7
7
  def groups
8
- self.class.collection_for(api.get(File.join(self.class.endpoint, id.to_s, "groups")))
8
+ Collection.new(api).find_all_by_url(related["groups"])
9
9
  end
10
10
  end
11
11
  end
@@ -4,8 +4,18 @@ module AnsibleTowerClient
4
4
  "inventories".freeze
5
5
  end
6
6
 
7
+ def inventory_sources
8
+ Collection.new(api).find_all_by_url(related['inventory_sources'])
9
+ end
10
+
11
+ def update_all_inventory_sources
12
+ inventory_sources.each do |inventory_source|
13
+ inventory_source.update if inventory_source.can_update?
14
+ end
15
+ end
16
+
7
17
  def root_groups
8
- self.class.collection_for(api.get(File.join(self.class.endpoint, id.to_s, "root_groups")))
18
+ Collection.new(api).find_all_by_url(related['root_groups'])
9
19
  end
10
20
  end
11
21
  end
@@ -0,0 +1,21 @@
1
+ module AnsibleTowerClient
2
+ class InventorySource < BaseModel
3
+ def self.endpoint
4
+ "inventory_sources".freeze
5
+ end
6
+
7
+ def can_update?
8
+ response = api.get("#{related['update']}").body
9
+
10
+ updatable = JSON.parse(response)
11
+ updatable['can_update']
12
+ end
13
+
14
+ def update
15
+ response = api.post("#{related['update']}").body
16
+
17
+ update = JSON.parse(response)
18
+ api.inventory_updates.find(update['inventory_update'])
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ module AnsibleTowerClient
2
+ class InventoryUpdate < BaseModel
3
+ def self.endpoint
4
+ "inventory_updates".freeze
5
+ end
6
+ end
7
+ end
@@ -3,6 +3,15 @@ module AnsibleTowerClient
3
3
  def self.endpoint
4
4
  "jobs".freeze
5
5
  end
6
+
7
+ def extra_vars_hash
8
+ extra_vars.empty? ? {} : hashify(:extra_vars)
9
+ end
10
+
11
+ def stdout
12
+ out_url = related['stdout']
13
+ return unless out_url
14
+ api.get("#{out_url}?format=txt").body
15
+ end
6
16
  end
7
17
  end
8
-
@@ -1,3 +1,3 @@
1
1
  module AnsibleTowerClient
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansible_tower_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Dunne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-04-14 00:00:00.000000000 Z
12
+ date: 2016-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -165,6 +165,8 @@ files:
165
165
  - lib/ansible_tower_client/hash_model.rb
166
166
  - lib/ansible_tower_client/host.rb
167
167
  - lib/ansible_tower_client/inventory.rb
168
+ - lib/ansible_tower_client/inventory_source.rb
169
+ - lib/ansible_tower_client/inventory_update.rb
168
170
  - lib/ansible_tower_client/job.rb
169
171
  - lib/ansible_tower_client/job_template.rb
170
172
  - lib/ansible_tower_client/logging.rb
@@ -191,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
193
  version: '0'
192
194
  requirements: []
193
195
  rubyforge_project:
194
- rubygems_version: 2.4.5.1
196
+ rubygems_version: 2.6.3
195
197
  signing_key:
196
198
  specification_version: 4
197
199
  summary: Ansible Tower REST API wrapper gem