crowbar-client 3.7.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dde7d7523db4411363365404f5e439b292b78723488ae6a732de79ecb08ae200
4
- data.tar.gz: a692fb4b07d250b28e317077cffb0d40166a70c870d74b8e16e398a97f57d6f0
3
+ metadata.gz: 578a4e1672fb4e6d3310494b6f9e4e0528f915af8120fb31413401df43a255fe
4
+ data.tar.gz: 422038df0820c6a5a19ed4289fedbd7058fdcf0f87c6d1b08153a6fc45fe5044
5
5
  SHA512:
6
- metadata.gz: ed7acd0f36016af684a11e9c4968f687d96f27385e407c348f5e4edde299403cfbce83ff8245f2f85f4d0b6058a9844b61bbc67749aba7d33d90a6c28bf1fab5
7
- data.tar.gz: e07e211190cd10599af16e18e3504833648150eec3dff9510245bf816912143345f6a2af941907700ce1a3ab0b5c8130f911cf10ea8615882707d50a5adfa50d
6
+ metadata.gz: 9db8d99338f99c3e052672fc7fa4d5fdd799ae0f3a78c5d58f6a420857567838a7d3812db51f380077b1e53485d49aeb8bd5e469a42145871f333de66cbe7578
7
+ data.tar.gz: 9ddf99523a722848990ab5eb54ebc9c757b4a55e5ed2b316f2707491273f99867dc709ee8226fd33d9153c3a05c078dbe97df805b4bd89c8cd9da280947c1b4e
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.9.0](https://github.com/crowbar/crowbar-client/releases/tag/v3.9.0) - 2019-04-05
4
+
5
+ * ENHANCEMENT
6
+ * Add support for the restricted APIs
7
+ * Add --raw to "proposal show" & "proposal edit"
8
+ * Correctly parse error messages that we don't handle natively
9
+
10
+ ## [3.8.0](https://github.com/crowbar/crowbar-client/releases/tag/v3.8.0) - 2019-04-02
11
+
12
+ * ENHANCEMENT
13
+ * Add 'ses' subcommand to upload SES configuration file to crowbar (@skazi0)
14
+
3
15
  ## [3.7.0](https://github.com/crowbar/crowbar-client/releases/tag/v3.7.0) - 2018-12-14
4
16
 
5
17
  * ENHANCEMENT
@@ -59,6 +59,9 @@ module Crowbar
59
59
  autoload :Repository,
60
60
  File.expand_path("../app/repository", __FILE__)
61
61
 
62
+ autoload :Restricted,
63
+ File.expand_path("../app/restricted", __FILE__)
64
+
62
65
  autoload :Role,
63
66
  File.expand_path("../app/role", __FILE__)
64
67
 
@@ -171,8 +171,14 @@ module Crowbar
171
171
  "SES (Ceph) specific commands, call without params for help"
172
172
  subcommand "ses", Crowbar::Client::App::Ses
173
173
 
174
+ desc "restricted [COMMANDS]",
175
+ "Commands specifc to restricted clients, call without params for help"
176
+ subcommand "restricted", Crowbar::Client::App::Restricted
177
+
174
178
  # hide SES command in older versions
175
179
  remove_command :ses unless Config.defaults[:cloud_version].to_i >= 9
180
+ # hide Restricted command in older versions
181
+ remove_command :restricted unless Config.defaults[:cloud_version].to_i >= 9
176
182
  end
177
183
  end
178
184
  end
@@ -98,6 +98,10 @@ module Crowbar
98
98
  With --filter <filter> option you can limit the result of
99
99
  printed out elements. You can use any substring that is part
100
100
  of the found elements.
101
+
102
+ With --raw option you can ensure that the program will not
103
+ automatically alter the proposal (to remove non-existing
104
+ nodes, for instance).
101
105
  LONGDESC
102
106
 
103
107
  method_option :format,
@@ -130,6 +134,12 @@ module Crowbar
130
134
  banner: "<filter>",
131
135
  desc: "Filter by criteria, display only data that contains filter"
132
136
 
137
+ method_option :raw,
138
+ type: :boolean,
139
+ default: false,
140
+ aliases: ["-r"],
141
+ desc: "Do not automatically edit the content of the proposal data"
142
+
133
143
  def show(barclamp, proposal)
134
144
  Command::Proposal::Show.new(
135
145
  *command_params(
@@ -221,6 +231,10 @@ module Crowbar
221
231
 
222
232
  With --merge option you can deep merge the provided data with
223
233
  the preloaded proposal.
234
+
235
+ With --raw option you can ensure that the program will not
236
+ automatically alter the proposal (to remove non-existing
237
+ nodes, for instance).
224
238
  LONGDESC
225
239
 
226
240
  method_option :data,
@@ -241,6 +255,12 @@ module Crowbar
241
255
  aliases: ["-m"],
242
256
  desc: "Merge input loaded from server with proposal data"
243
257
 
258
+ method_option :raw,
259
+ type: :boolean,
260
+ default: false,
261
+ aliases: ["-r"],
262
+ desc: "Do not automatically edit the content of the proposal data"
263
+
244
264
  def edit(barclamp, proposal)
245
265
  Command::Proposal::Edit.new(
246
266
  *command_params(
@@ -0,0 +1,136 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module App
20
+ #
21
+ # A Thor based CLI wrapper for restricted commands
22
+ #
23
+ class Restricted < Base
24
+ desc "allocate NAME_OR_ALIAS",
25
+ "Allocate the specified node"
26
+
27
+ long_desc <<-LONGDESC
28
+ `allocate NAME_OR_ALIAS` will try to allocate the specified
29
+ node.
30
+ LONGDESC
31
+
32
+ def allocate(name)
33
+ Command::Restricted::Allocate.new(
34
+ *command_params(
35
+ name: name
36
+ )
37
+ ).execute
38
+ rescue => e
39
+ catch_errors(e)
40
+ end
41
+
42
+ desc "ping",
43
+ "Ping the administration server"
44
+
45
+ long_desc <<-LONGDESC
46
+ `ping` will check that the administration server is up.
47
+ LONGDESC
48
+
49
+ def ping
50
+ Command::Restricted::Ping.new(
51
+ *command_params
52
+ ).execute
53
+ rescue => e
54
+ catch_errors(e)
55
+ end
56
+
57
+ desc "show NAME_OR_ALIAS",
58
+ "Show restricted data for a specific node"
59
+
60
+ long_desc <<-LONGDESC
61
+ `show NAME_OR_ALIAS` will try to fetch the restricted data
62
+ for the specified node. If you just want to see a specific
63
+ subset of the restricted data you can provide the --filter
64
+ option separated by a dot for every element.
65
+
66
+ With --format <format> option you can choose an output format
67
+ with the available options table, json or plain. You can also
68
+ use the shortcut options --table, --json or --plain.
69
+
70
+ With --filter <filter> option you can limit the result of
71
+ printed out elements. You can use any substring that is part
72
+ of the found elements.
73
+ LONGDESC
74
+
75
+ method_option :format,
76
+ type: :string,
77
+ default: "table",
78
+ banner: "<format>",
79
+ desc: "Format of the output, valid formats are table, json or plain"
80
+
81
+ method_option :table,
82
+ type: :boolean,
83
+ default: false,
84
+ aliases: [],
85
+ desc: "Format output as table, a shortcut for --format table option"
86
+
87
+ method_option :json,
88
+ type: :boolean,
89
+ default: false,
90
+ aliases: [],
91
+ desc: "Format output as json, a shortcut for --format json option"
92
+
93
+ method_option :plain,
94
+ type: :boolean,
95
+ default: false,
96
+ aliases: [],
97
+ desc: "Format output as plain text, a shortcut for --format plain option"
98
+
99
+ method_option :filter,
100
+ type: :string,
101
+ default: nil,
102
+ banner: "<filter>",
103
+ desc: "Filter by criteria, display only data that contains filter"
104
+
105
+ def show(name)
106
+ Command::Restricted::Show.new(
107
+ *command_params(
108
+ name: name
109
+ )
110
+ ).execute
111
+ rescue => e
112
+ catch_errors(e)
113
+ end
114
+
115
+ desc "transition NAME_OR_ALIAS STATE",
116
+ "Transition a node to a specific state"
117
+
118
+ long_desc <<-LONGDESC
119
+ `transition NAME_OR_ALIAS STATE` will try to transition the
120
+ specified node into a specified state.
121
+ LONGDESC
122
+
123
+ def transition(name, state)
124
+ Command::Restricted::Transition.new(
125
+ *command_params(
126
+ name: name,
127
+ state: state
128
+ )
129
+ ).execute
130
+ rescue => e
131
+ catch_errors(e)
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -53,6 +53,9 @@ module Crowbar
53
53
  autoload :Repository,
54
54
  File.expand_path("../command/repository", __FILE__)
55
55
 
56
+ autoload :Restricted,
57
+ File.expand_path("../command/restricted", __FILE__)
58
+
56
59
  autoload :Role,
57
60
  File.expand_path("../command/role", __FILE__)
58
61
 
@@ -58,6 +58,15 @@ module Crowbar
58
58
  end
59
59
 
60
60
  def err(message)
61
+ if message.is_a?(RestClient::Response)
62
+ begin
63
+ json = JSON.parse(message.to_s)
64
+ message = json.fetch("error", message)
65
+ rescue JSON::ParserError
66
+ # too bad, this is not what we expected, we'll print the ugly string
67
+ nil
68
+ end
69
+ end
61
70
  raise SimpleCatchableError, message
62
71
  end
63
72
  end
@@ -59,7 +59,11 @@ module Crowbar
59
59
 
60
60
  case result.code
61
61
  when 200
62
- deployment_cleanup result.parsed_response
62
+ if options[:raw]
63
+ result.parsed_response
64
+ else
65
+ deployment_cleanup result.parsed_response
66
+ end
63
67
  when 404
64
68
  err "Failed to preload proposal"
65
69
  else
@@ -40,13 +40,19 @@ module Crowbar
40
40
  request.process do |request|
41
41
  case request.code
42
42
  when 200
43
+ content = if options[:raw]
44
+ content_from(request)
45
+ else
46
+ deployment_cleanup(content_from(request))
47
+ end
48
+
43
49
  formatter = Formatter::Nested.new(
44
50
  format: provide_format,
45
51
  path: provide_filter,
46
52
  headings: ["Key", "Value"],
47
53
  values: Filter::Subset.new(
48
54
  filter: provide_filter,
49
- values: deployment_cleanup(content_from(request))
55
+ values: content
50
56
  ).result
51
57
  )
52
58
 
@@ -0,0 +1,38 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Command
20
+ #
21
+ # Module for the Restricted command implementations
22
+ #
23
+ module Restricted
24
+ autoload :Allocate,
25
+ File.expand_path("../restricted/allocate", __FILE__)
26
+
27
+ autoload :Ping,
28
+ File.expand_path("../restricted/ping", __FILE__)
29
+
30
+ autoload :Show,
31
+ File.expand_path("../restricted/show", __FILE__)
32
+
33
+ autoload :Transition,
34
+ File.expand_path("../restricted/transition", __FILE__)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,51 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require "easy_diff"
18
+
19
+ module Crowbar
20
+ module Client
21
+ module Command
22
+ module Restricted
23
+ #
24
+ # Implementation for the restricted allocate command
25
+ #
26
+ class Allocate < Base
27
+ def request
28
+ @request ||= Request::Restricted::Allocate.new(
29
+ args.easy_merge(
30
+ action: :allocate
31
+ )
32
+ )
33
+ end
34
+
35
+ def execute
36
+ request.process do |request|
37
+ case request.code
38
+ when 200
39
+ say "Successfully triggered allocate for #{args.name}"
40
+ when 404
41
+ err "Node does not exist"
42
+ else
43
+ err request.parsed_response["error"]
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,45 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Command
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted ping command
23
+ #
24
+ class Ping < Base
25
+ def request
26
+ @request ||= Request::Restricted::Ping.new(
27
+ args
28
+ )
29
+ end
30
+
31
+ def execute
32
+ request.process do |request|
33
+ case request.code
34
+ when 200
35
+ say "Successfully pinged the administration server"
36
+ else
37
+ err request.parsed_response["error"]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,72 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Command
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted show command
23
+ #
24
+ class Show < Base
25
+ include Mixin::Format
26
+ include Mixin::Filter
27
+
28
+ def request
29
+ @request ||= Request::Restricted::Show.new(
30
+ args
31
+ )
32
+ end
33
+
34
+ def execute
35
+ request.process do |request|
36
+ case request.code
37
+ when 200
38
+ formatter = Formatter::Nested.new(
39
+ format: provide_format,
40
+ path: provide_filter,
41
+ headings: ["Key", "Value"],
42
+ values: Filter::Subset.new(
43
+ filter: provide_filter,
44
+ values: content_from(request)
45
+ ).result
46
+ )
47
+
48
+ if formatter.empty?
49
+ err "No result"
50
+ elsif args.name == "help"
51
+ err "Node does not exist"
52
+ else
53
+ say formatter.result
54
+ end
55
+ when 404
56
+ err "Node does not exist"
57
+ else
58
+ err request.parsed_response["error"]
59
+ end
60
+ end
61
+ end
62
+
63
+ protected
64
+
65
+ def content_from(request)
66
+ request.parsed_response
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,47 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Command
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted transition command
23
+ #
24
+ class Transition < Base
25
+ def request
26
+ @request ||= Request::Restricted::Transition.new(
27
+ args
28
+ )
29
+ end
30
+
31
+ def execute
32
+ request.process do |request|
33
+ case request.code
34
+ when 200
35
+ say "Successfully transitioned to #{args.state}"
36
+ when 404
37
+ err "Node does not exist"
38
+ else
39
+ err request.parsed_response["error"]
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -59,6 +59,9 @@ module Crowbar
59
59
  autoload :Rest,
60
60
  File.expand_path("../request/rest", __FILE__)
61
61
 
62
+ autoload :Restricted,
63
+ File.expand_path("../request/restricted", __FILE__)
64
+
62
65
  autoload :Role,
63
66
  File.expand_path("../request/role", __FILE__)
64
67
 
@@ -0,0 +1,38 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ #
21
+ # Module for the Restricted request implementations
22
+ #
23
+ module Restricted
24
+ autoload :Allocate,
25
+ File.expand_path("../restricted/allocate", __FILE__)
26
+
27
+ autoload :Ping,
28
+ File.expand_path("../restricted/ping", __FILE__)
29
+
30
+ autoload :Show,
31
+ File.expand_path("../restricted/show", __FILE__)
32
+
33
+ autoload :Transition,
34
+ File.expand_path("../restricted/transition", __FILE__)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted allocate request
23
+ #
24
+ class Allocate < Base
25
+ #
26
+ # HTTP method that gets used by the request
27
+ #
28
+ # @return [Symbol] the method for the request
29
+ #
30
+ def method
31
+ :post
32
+ end
33
+
34
+ #
35
+ # Path to the API endpoint for the request
36
+ #
37
+ # @return [String] path to the API endpoint
38
+ #
39
+ def url
40
+ [
41
+ "restricted",
42
+ "allocate",
43
+ attrs.name
44
+ ].join("/")
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,49 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted ping request
23
+ #
24
+ class Ping < Base
25
+ #
26
+ # HTTP method that gets used by the request
27
+ #
28
+ # @return [Symbol] the method for the request
29
+ #
30
+ def method
31
+ :get
32
+ end
33
+
34
+ #
35
+ # Path to the API endpoint for the request
36
+ #
37
+ # @return [String] path to the API endpoint
38
+ #
39
+ def url
40
+ [
41
+ "restricted",
42
+ "ping"
43
+ ].join("/")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ module Restricted
21
+ #
22
+ # Implementation for the restricted show request
23
+ #
24
+ class Show < Base
25
+ #
26
+ # HTTP method that gets used by the request
27
+ #
28
+ # @return [Symbol] the method for the request
29
+ #
30
+ def method
31
+ :get
32
+ end
33
+
34
+ #
35
+ # Path to the API endpoint for the request
36
+ #
37
+ # @return [String] path to the API endpoint
38
+ #
39
+ def url
40
+ [
41
+ "restricted",
42
+ "show",
43
+ attrs.name
44
+ ].join("/")
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,63 @@
1
+ #
2
+ # Copyright 2019, SUSE
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require "easy_diff"
18
+
19
+ module Crowbar
20
+ module Client
21
+ module Request
22
+ module Restricted
23
+ #
24
+ # Implementation for the restricted transition request
25
+ #
26
+ class Transition < Base
27
+ #
28
+ # Override the request content
29
+ #
30
+ # @return [Hash] the content for the request
31
+ #
32
+ def content
33
+ super.easy_merge!(
34
+ state: attrs.state
35
+ )
36
+ end
37
+
38
+ #
39
+ # HTTP method that gets used by the request
40
+ #
41
+ # @return [Symbol] the method for the request
42
+ #
43
+ def method
44
+ :post
45
+ end
46
+
47
+ #
48
+ # Path to the API endpoint for the request
49
+ #
50
+ # @return [String] path to the API endpoint
51
+ #
52
+ def url
53
+ [
54
+ "restricted",
55
+ "transition",
56
+ attrs.name
57
+ ].join("/")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -28,7 +28,7 @@ module Crowbar
28
28
  #
29
29
  # Minor version
30
30
  #
31
- MINOR = 7
31
+ MINOR = 9
32
32
 
33
33
  #
34
34
  # Patch version
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crowbar-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.0
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Boerger
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-04-02 00:00:00.000000000 Z
13
+ date: 2019-04-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -244,6 +244,7 @@ files:
244
244
  - lib/crowbar/client/app/node.rb
245
245
  - lib/crowbar/client/app/proposal.rb
246
246
  - lib/crowbar/client/app/repository.rb
247
+ - lib/crowbar/client/app/restricted.rb
247
248
  - lib/crowbar/client/app/role.rb
248
249
  - lib/crowbar/client/app/server.rb
249
250
  - lib/crowbar/client/app/services.rb
@@ -310,6 +311,11 @@ files:
310
311
  - lib/crowbar/client/command/repository/deactivate.rb
311
312
  - lib/crowbar/client/command/repository/deactivate_all.rb
312
313
  - lib/crowbar/client/command/repository/list.rb
314
+ - lib/crowbar/client/command/restricted.rb
315
+ - lib/crowbar/client/command/restricted/allocate.rb
316
+ - lib/crowbar/client/command/restricted/ping.rb
317
+ - lib/crowbar/client/command/restricted/show.rb
318
+ - lib/crowbar/client/command/restricted/transition.rb
313
319
  - lib/crowbar/client/command/role.rb
314
320
  - lib/crowbar/client/command/role/list.rb
315
321
  - lib/crowbar/client/command/role/show.rb
@@ -422,6 +428,11 @@ files:
422
428
  - lib/crowbar/client/request/repository/deactivate_all.rb
423
429
  - lib/crowbar/client/request/repository/list.rb
424
430
  - lib/crowbar/client/request/rest.rb
431
+ - lib/crowbar/client/request/restricted.rb
432
+ - lib/crowbar/client/request/restricted/allocate.rb
433
+ - lib/crowbar/client/request/restricted/ping.rb
434
+ - lib/crowbar/client/request/restricted/show.rb
435
+ - lib/crowbar/client/request/restricted/transition.rb
425
436
  - lib/crowbar/client/request/role.rb
426
437
  - lib/crowbar/client/request/role/list.rb
427
438
  - lib/crowbar/client/request/role/show.rb