rundeck 0.0.3 → 0.0.4

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: ff00bf23f1fde03b1f603132d506ae0695e02827
4
- data.tar.gz: fb4a1f1a7b74dac64e73e03a5c23d2acdd089d99
3
+ metadata.gz: 31730efc03d57ef39d030de2aaec177f44d26a4e
4
+ data.tar.gz: 193d25852a20e7a351760d90e4a9a311e1ed3210
5
5
  SHA512:
6
- metadata.gz: c51e3995a9bb9ac36d5fe7522e9e98ca6d685b65d6b11b9fbf453c32c34883852976651fedf0fbf85b1fbf70d84291629681fca273ad358bdfc8c224ac57c3d9
7
- data.tar.gz: 57094ebfae59988afb663fadda7ae78e0244feda93da93dc77e586dad0f20f08787999ede8de7a73014a7ff211b23eaf427fa1809a2b2ec872eb77eb2cfd9018
6
+ metadata.gz: 7c0324e4bff89cbc319ad93c102c16927bb76928bd5be58f70679d570eb19d8a87f2ba895f6e2c9e2515d5da23193c065cbfce3d18661b18d85adefd952b8ae3
7
+ data.tar.gz: 564b902d2ed2f4771495809585e32899d088ed7e289c6219cdbb9fab34d04d77e3efffb958668d34d51e414b6a850ca9af95e60311fe2914b5be701368f9dd3c
@@ -15,3 +15,6 @@ Metrics/MethodLength:
15
15
  # sense to let the line exceed that length, especially in specs.
16
16
  Metrics/LineLength:
17
17
  Max: 500
18
+
19
+ Metrics/AbcSize:
20
+ Enabled: false
@@ -0,0 +1,2 @@
1
+ 0.0.4 (November 4, 2014)
2
+ - First version with a CHANGELOG. Changes from here will be documented.
@@ -9,7 +9,7 @@ module Rundeck
9
9
  def initialize(options = {})
10
10
  options = Rundeck.options.merge(options)
11
11
  Configuration::VALID_OPTIONS_KEYS.each do |key|
12
- send("#{key}=", options[key])
12
+ send("#{key}=", options[key]) if options.key?(key)
13
13
  end
14
14
  set_request_defaults @endpoint, @api_token
15
15
  end
@@ -54,6 +54,7 @@ module Rundeck
54
54
  include Execution
55
55
  include Job
56
56
  include Key
57
+ include Project
57
58
 
58
59
  # Turn a hash into an object for easy accessibility.
59
60
  #
@@ -68,7 +69,7 @@ module Rundeck
68
69
  if result.is_a?(Hash)
69
70
  ObjectifiedHash.new(result)
70
71
  elsif result.is_a?(Array)
71
- result.map! { |e| ObjectifiedHash.new(e) }
72
+ result.map { |e| ObjectifiedHash.new(e) }
72
73
  elsif result.nil?
73
74
  nil
74
75
  else
@@ -2,6 +2,12 @@ module Rundeck
2
2
  class Client
3
3
  # Defines methods related to executions.
4
4
  module Execution
5
+ def project_options_query(project, options)
6
+ options[:query] = {} if options[:query].nil?
7
+ options[:query]['project'] = project
8
+ options
9
+ end
10
+
5
11
  # Execute a job
6
12
  #
7
13
  # @!macro has_optional_params
@@ -19,7 +25,7 @@ module Rundeck
19
25
  # @return [Rundeck::ObjectifiedHash]
20
26
  # @!macro exceptions
21
27
  def execute_job(id, options = {})
22
- objectify post("/job/#{id}/executions", options)['result']['executions']['execution']
28
+ objectify post("/job/#{id}/executions", options)['result']['executions']
23
29
  end
24
30
  alias_method :run_job, :execute_job
25
31
 
@@ -39,7 +45,7 @@ module Rundeck
39
45
  # @return [Rundeck::ObjectifiedHash]
40
46
  # @!macro exceptions
41
47
  def job_executions(id, options = {})
42
- r = get("/job/#{id}/executions", options)['result']['executions']['execution']
48
+ r = get("/job/#{id}/executions", options)['result']['executions']
43
49
  objectify r
44
50
  end
45
51
 
@@ -55,21 +61,12 @@ module Rundeck
55
61
  #
56
62
  # @param [String] project List running executions from this project
57
63
  # @!macro options
58
- # @return [nil] if no running executions
59
- # @return [Rundeck::ObjectifiedHash] if a single running job execution
60
- # @return [Array<Rundeck::ObjectifiedHash>] if multiple running job executions
64
+ # @return [Rundeck::ObjectifiedHash]
61
65
  # @!macro exceptions
62
- # def running_job_executions(project, options = {})
63
- # options[:query] = {} if options[:query].nil?
64
- # options[:query]['project'] = project
65
- # r = get('/executions/running', options)
66
- #
67
- # if objectify(r['result']['executions']).count != '0'
68
- # objectify r['result']['executions']['execution']
69
- # else
70
- # nil
71
- # end
72
- # end
66
+ def running_job_executions(project, options = {})
67
+ options = project_options_query(project, options)
68
+ objectify get('/executions/running', options)['result']['executions']
69
+ end
73
70
 
74
71
  # Delete all executions for a specific job
75
72
  #
@@ -175,12 +172,10 @@ module Rundeck
175
172
  #
176
173
  # @see http://rundeck.org/docs/api/index.html#execution-query
177
174
  # Rundeck API documentation for 'GET /api/12/executions'
178
- # def execution_query(project, options = {})
179
- # options[:query] = {} if options[:query].nil?
180
- # options[:query]['project'] = project
181
- #
182
- # objectify get('/executions', options)['result']
183
- # end
175
+ def execution_query(project, options = {})
176
+ options = project_options_query(project, options)
177
+ objectify get('/executions', options)['result']['executions']
178
+ end
184
179
 
185
180
  # def execution_output()
186
181
  #
@@ -12,12 +12,13 @@ module Rundeck
12
12
  # @return [Array<Rundeck::ObjectifiedHash>]
13
13
  # @!macro exceptions
14
14
  def jobs(project, options = {})
15
- objectify get("/project/#{project}/jobs", options)['jobs']['job']
15
+ objectify get("/project/#{project}/jobs", options)['jobs']
16
16
  end
17
17
 
18
18
  # Gets a single job by id
19
19
  #
20
- # @example Rundeck.job('c07518ef-b697-4792-9a59-5b4f08855b67')
20
+ # @example
21
+ # Rundeck.job('c07518ef-b697-4792-9a59-5b4f08855b67')
21
22
  #
22
23
  # @param [String] id Job id
23
24
  # @!macro options
@@ -0,0 +1,84 @@
1
+ module Rundeck
2
+ class Client
3
+ # Defines methods related to projects.
4
+ module Project
5
+ # Get all projects
6
+ #
7
+ # @see http://rundeck.org/docs/api/index.html#listing-projects
8
+ # Rundeck API documentation for 'GET /api/1/projects' endpoint
9
+ #
10
+ # @example
11
+ # Rundeck.projects
12
+ #
13
+ # @!macro options
14
+ # @return [Rundeck::ObjectifiedHash]
15
+ # @!macro exceptions
16
+ def projects(options = {})
17
+ objectify get('/projects', options)['projects']
18
+ end
19
+
20
+ # Create a project
21
+ #
22
+ # @see http://rundeck.org/docs/api/index.html#project-creation
23
+ # Rundeck API documentation for 'POST /api/11/projects' endpoint
24
+ #
25
+ # @example
26
+ # @TODO: Example
27
+ #
28
+ # @param [String] content The job definition(s) as yaml or xml
29
+ # @param [String] format The project creation format. 'json|xml',
30
+ # defaults to 'json'
31
+ # @!macro options
32
+ # @return [Rundeck::ObjectifiedHash]
33
+ # @!macro exceptions
34
+ def create_project(content, format = 'json', options = {})
35
+ options[:headers] = {} if options[:headers].nil?
36
+ options[:headers] = if format == 'json'
37
+ options[:headers].merge!(
38
+ 'Content-Type' => 'application/json')
39
+ elsif format == 'xml'
40
+ options[:headers].merge!(
41
+ 'Content-Type' => 'application/xml')
42
+ else
43
+ fail Error::InvalidAttributes,
44
+ 'format must be json or xml'
45
+ end
46
+ options[:body] = content
47
+
48
+ objectify post('/projects', options)['project']
49
+ end
50
+
51
+ # Get a project by name
52
+ #
53
+ # @see http://rundeck.org/docs/api/index.html#getting-project-info
54
+ # Rundeck API documentation for 'GET /api/1/project/[NAME]' endpoint
55
+ #
56
+ # @example
57
+ # Rundeck.project('anvils')
58
+ #
59
+ # @param [String] name The project name
60
+ # @!macro options
61
+ # @return [Rundeck::ObjectifiedHash]
62
+ # @!macro exceptions
63
+ def project(name, options = {})
64
+ objectify get("/project/#{name}", options)['project']
65
+ end
66
+
67
+ # Delete a project
68
+ #
69
+ # @see http://rundeck.org/docs/api/index.html#project-deletion
70
+ # Rundeck API documentation for 'DELETE /api/11/project/[NAME]' endpoint
71
+ #
72
+ # @example
73
+ # Rundeck.delete_project('my_project')
74
+ #
75
+ # @param [String] name The project name
76
+ # @!macro options
77
+ # @return nil
78
+ # @!macro exceptions
79
+ def delete_project(name, options = {})
80
+ objectify delete("/project/#{name}", options)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -5,7 +5,13 @@ module Rundeck
5
5
  def initialize(hash)
6
6
  @hash = hash
7
7
  @data = hash.each_with_object({}) do |(key, value), data|
8
- value = ObjectifiedHash.new(value) if value.is_a? Hash
8
+ value = if value.is_a?(Hash)
9
+ ObjectifiedHash.new(value)
10
+ elsif value.is_a?(Array)
11
+ value.map { |e| ObjectifiedHash.new(e) }
12
+ else
13
+ value
14
+ end
9
15
  data[key.to_s.downcase] = value
10
16
  data
11
17
  end
@@ -1,3 +1,3 @@
1
1
  module Rundeck
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rspec', '~> 3.1.0'
29
29
  spec.add_development_dependency 'rspec-core', '~> 3.1.2'
30
30
  spec.add_development_dependency 'rspec-its', '~> 1.0.0'
31
+ spec.add_development_dependency 'rubocop'
31
32
  spec.add_development_dependency 'webmock'
32
33
  spec.add_development_dependency 'codeclimate-test-reporter'
33
34
  spec.add_development_dependency 'guard-rspec', '~> 4.3.0'
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://192.168.50.2:4440/api/12/projects
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{ "name": "anvils" }'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ X-Rundeck-Auth-Token:
13
+ - cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
14
+ Accept:
15
+ - application/xml
16
+ response:
17
+ status:
18
+ code: 409
19
+ message: Conflict
20
+ headers:
21
+ Set-Cookie:
22
+ - JSESSIONID=urdzotmxs4xr1i958fa3gzya0;Path=/
23
+ Expires:
24
+ - Thu, 01 Jan 1970 00:00:00 GMT
25
+ Content-Type:
26
+ - text/xml;charset=UTF-8
27
+ X-Rundeck-Api-Version:
28
+ - '12'
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Server:
32
+ - Jetty(7.6.0.v20120127)
33
+ body:
34
+ encoding: UTF-8
35
+ string: |-
36
+ <result error='true' apiversion='12'>
37
+ <error code='api.error.item.alreadyexists'>
38
+ <message>project already exists: anvils</message>
39
+ </error>
40
+ </result>
41
+ http_version:
42
+ recorded_at: Mon, 03 Nov 2014 18:56:26 GMT
43
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,55 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://192.168.50.2:4440/api/12/projects
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{ "name": "json_project" }'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ X-Rundeck-Auth-Token:
13
+ - cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
14
+ Accept:
15
+ - application/xml
16
+ response:
17
+ status:
18
+ code: 201
19
+ message: Created
20
+ headers:
21
+ Set-Cookie:
22
+ - JSESSIONID=mtleb8x2y6qpqxb2a3vdup22;Path=/
23
+ Expires:
24
+ - Thu, 01 Jan 1970 00:00:00 GMT
25
+ X-Rundeck-Api-Xml-Response-Wrapper:
26
+ - 'false'
27
+ Content-Type:
28
+ - application/xml;charset=UTF-8
29
+ X-Rundeck-Api-Version:
30
+ - '12'
31
+ Transfer-Encoding:
32
+ - chunked
33
+ Server:
34
+ - Jetty(7.6.0.v20120127)
35
+ body:
36
+ encoding: UTF-8
37
+ string: |-
38
+ <project url='http://192.168.50.2:4440/api/12/project/json_project'>
39
+ <name>json_project</name>
40
+ <description></description>
41
+ <config>
42
+ <property key='project.name' value='json_project' />
43
+ <property key='project.ssh-authentication' value='privateKey' />
44
+ <property key='service.NodeExecutor.default.provider' value='jsch-ssh' />
45
+ <property key='resources.source.1.config.includeServerNode' value='true' />
46
+ <property key='resources.source.1.config.generateFileAutomatically' value='true' />
47
+ <property key='resources.source.1.config.file' value='/var/rundeck/projects/json_project/etc/resources.xml' />
48
+ <property key='project.ssh-keypath' value='/var/lib/rundeck/.ssh/id_rsa' />
49
+ <property key='service.FileCopier.default.provider' value='jsch-scp' />
50
+ <property key='resources.source.1.type' value='file' />
51
+ </config>
52
+ </project>
53
+ http_version:
54
+ recorded_at: Mon, 03 Nov 2014 18:50:21 GMT
55
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://192.168.50.2:4440/api/12/projects
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <project>
10
+ <name>xml_project</name>
11
+ </project>
12
+ headers:
13
+ Content-Type:
14
+ - application/xml
15
+ X-Rundeck-Auth-Token:
16
+ - cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
17
+ Accept:
18
+ - application/xml
19
+ response:
20
+ status:
21
+ code: 201
22
+ message: Created
23
+ headers:
24
+ Set-Cookie:
25
+ - JSESSIONID=1bj2k8scmc7jvll68akb8nm9s;Path=/
26
+ Expires:
27
+ - Thu, 01 Jan 1970 00:00:00 GMT
28
+ X-Rundeck-Api-Xml-Response-Wrapper:
29
+ - 'false'
30
+ Content-Type:
31
+ - application/xml;charset=UTF-8
32
+ X-Rundeck-Api-Version:
33
+ - '12'
34
+ Transfer-Encoding:
35
+ - chunked
36
+ Server:
37
+ - Jetty(7.6.0.v20120127)
38
+ body:
39
+ encoding: UTF-8
40
+ string: |-
41
+ <project url='http://192.168.50.2:4440/api/12/project/xml_project'>
42
+ <name>xml_project</name>
43
+ <description></description>
44
+ <config>
45
+ <property key='project.name' value='xml_project' />
46
+ <property key='project.ssh-authentication' value='privateKey' />
47
+ <property key='service.NodeExecutor.default.provider' value='jsch-ssh' />
48
+ <property key='resources.source.1.config.includeServerNode' value='true' />
49
+ <property key='resources.source.1.config.generateFileAutomatically' value='true' />
50
+ <property key='resources.source.1.config.file' value='/var/rundeck/projects/xml_project/etc/resources.xml' />
51
+ <property key='project.ssh-keypath' value='/var/lib/rundeck/.ssh/id_rsa' />
52
+ <property key='service.FileCopier.default.provider' value='jsch-scp' />
53
+ <property key='resources.source.1.type' value='file' />
54
+ </config>
55
+ </project>
56
+ http_version:
57
+ recorded_at: Mon, 03 Nov 2014 18:51:06 GMT
58
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,41 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: delete
5
+ uri: http://192.168.50.2:4440/api/12/project/project1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Rundeck-Auth-Token:
11
+ - cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd
12
+ Accept:
13
+ - application/xml
14
+ response:
15
+ status:
16
+ code: 404
17
+ message: Not Found
18
+ headers:
19
+ Set-Cookie:
20
+ - JSESSIONID=1x1jz735m5pf41dyllrj4dbj9h;Path=/
21
+ Expires:
22
+ - Thu, 01 Jan 1970 00:00:00 GMT
23
+ Content-Type:
24
+ - text/xml;charset=UTF-8
25
+ X-Rundeck-Api-Version:
26
+ - '12'
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Server:
30
+ - Jetty(7.6.0.v20120127)
31
+ body:
32
+ encoding: UTF-8
33
+ string: |-
34
+ <result error='true' apiversion='12'>
35
+ <error code='api.error.item.doesnotexist'>
36
+ <message>Project does not exist: project1</message>
37
+ </error>
38
+ </result>
39
+ http_version:
40
+ recorded_at: Sun, 02 Nov 2014 18:46:21 GMT
41
+ recorded_with: VCR 2.9.3