usd 0.2.2 → 0.2.5.3

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +44 -22
  3. data/bin/rusdc +41 -7
  4. data/change_log.md +103 -1
  5. data/usd.gemspec +2 -2
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3fcd67e1d03c8438152bd6a247c644d72b4d7300ae8e434d5e0920772df6473
4
- data.tar.gz: 49289a822d2906027417ac0d56d621a1cd1b53766ff651b5069858a8bb221d6e
3
+ metadata.gz: f696d29388c8753c8af789acf542239241211c06846def69b792a9cc95eee735
4
+ data.tar.gz: 53f51965deba761faa9d759d77661599631609e2e7e4cf04d76eaa30088347a7
5
5
  SHA512:
6
- metadata.gz: 4e4f7fde898d1b6477b9c08e96811b738d45e40fffffd16f3c0d474c1629d3e2a0ba4079b453623917a1d111f11b6989e83378b63e728c334936c4ecce271f5b
7
- data.tar.gz: b517f049992b629a745e23c0af441814a7f45486a9a0617b6a69ae319cd6c68df9cf0561ac1033d1d4bc63e045d281836067f40e24fc6ca6c2985d9f401967e0
6
+ metadata.gz: 317cd855b80a7fd240cccfb94211529c7857bcd4fa0347c72b7c29a4ec10135f713e1edc45d42de469febfa4fe405ffe137db92e0a0db9b1a54ba812eb2a9848
7
+ data.tar.gz: 02d8a72b2f6a552cd999629409e739ae7e87eeed93b10a5e9daa16c875a51f6afcaf474811931c20d75dd07840e749b62a00ae8d8b233849d21b498451451cd5
data/README.md CHANGED
@@ -21,6 +21,14 @@ yum group install "Development Tools"
21
21
  yum install ruby-devel
22
22
  ```
23
23
 
24
+ # documentation
25
+
26
+ see [https://github.com/ogaida/usd/wiki](https://github.com/ogaida/usd/wiki)
27
+
28
+ ## bash-completion
29
+
30
+ see [https://github.com/ogaida/usd/wiki/bash-completion](https://github.com/ogaida/usd/wiki/bash-completion)
31
+
24
32
  # external tools
25
33
 
26
34
  If you use the `rusdc find` command with `--format mlr` option then you need `mlr`.
@@ -32,28 +40,31 @@ Place the `mlr`-binary in a path, which is in your PATH-Environment. Download-Ur
32
40
  # functions from the commandline-tool `rusdc`
33
41
 
34
42
  ```
35
- rusdc
36
- Commands:
37
- rusdc chg_add_nr <co> <ci> # add a CI to a changeorder
38
- rusdc chg_list_nr <co> # list all CIs of one changeorder
39
- rusdc create # pipe json-data to create object
40
- rusdc field_names <object-type> # list all fields of an object including its format
41
- rusdc find <object-type> [where-clause] [fields, comma separated] [options] # finds each object which meets the wc-condition
42
- rusdc get <object-type> <common_name> # shows one object
43
- rusdc get_attachment_of_ci <ci_name> <filename> # download an attachment of a CI and print it out on stdout
44
- rusdc get_attachment_of_co <co_name> <filename> # download an attachment of a changeorder and print it out on stdout
45
- rusdc help [COMMAND] # Describe available commands or one specific command
46
- rusdc in_list_child_ins <in> # list all child-incidents of one incident
47
- rusdc list_attachments_of_ci <ci_name> # list all attachments of a CI
48
- rusdc list_attachments_of_co <co_name> # list all attachments of a changeorder
49
- rusdc nr_add_child <nr-name> <child-name> # add one child CI to another CI
50
- rusdc nr_changes <nr> [inactive-too] # list all open changeorders of one CI
51
- rusdc nr_childs <ci-name> # lists all childs CIs of a specific CI
52
- rusdc nr_incidents <nr> [inactive-too] # lists all incident of a specific CI
53
- rusdc nr_parents <ci-name> # lists all parent CIs of a specific CI
54
- rusdc update # pipe json-data to update object
55
- rusdc update_attr <obj> <common_name> <key> <value> # updates a direct (not referenced) attribute of one object.
56
- rusdc update_ref_attr <obj> <common_name> <key> <value> # updates a referenced attribute of one object.
43
+ rusdc chg_add_nr <co> <ci> # add a CI to a changeorder
44
+ rusdc chg_list_nr <co> # list all CIs of one changeorder
45
+ rusdc create # pipe json-data to create object
46
+ rusdc field_names <object-type> [wc] # list all fields of an object including its format
47
+ rusdc find <object-type> [where-clause] [fields, comma separated] [options] # finds each object which meets the wc-condition
48
+ rusdc get <object-type> <common_name|id> # shows one object by name or id
49
+ rusdc get_all_attachments_of_co <co_name> # get all attachments of a changeorder and save all th...
50
+ rusdc get_attachment_of_ci <ci_name> <filename> # download an attachment of a CI and print it out on s...
51
+ rusdc get_attachment_of_co <co_name> <filename> # download an attachment of a changeorder and print it...
52
+ rusdc help [COMMAND] # Describe available commands or one specific command
53
+ rusdc in_add_2_chg <changeorder> <incident> # add incident to changeorder
54
+ rusdc in_list_child_ins <in> # list all child-incidents of one incident
55
+ rusdc list_attachments_of_ci <ci_name> # list all attachments of a CI
56
+ rusdc list_attachments_of_co <co_name> # list all attachments of a changeorder
57
+ rusdc nr_add_child <nr-name> <child-name> # add one child CI to another CI
58
+ rusdc nr_add_org <nr> <org> # add an Organisation to a ConfigurationItem
59
+ rusdc nr_changes <nr> [inactive-too] # list all open changeorders of one CI
60
+ rusdc nr_childs <ci-name> # lists all childs CIs of a specific CI
61
+ rusdc nr_incidents <nr> [inactive-too] # lists all incident of a specific CI
62
+ rusdc nr_parents <ci-name> # lists all parent CIs of a specific CI
63
+ rusdc update # pipe json-data to update object
64
+ rusdc update_attr <obj> <common_name|wc> <key> <value> # updates a direct (not referenced) attribute of one o...
65
+ rusdc update_attr_by_id <obj> <id> <key> <value> # updates a plain attribute of one object by id, does ...
66
+ rusdc update_ref_attr <obj> <common_name> <key> <value> # updates a referenced attribute of one object.
67
+ rusdc update_ref_attr_by_id <obj> <id> <key> <value_id> # updates a referenced attribute of one object_id by v...
57
68
  ```
58
69
 
59
70
  # environment-variables
@@ -81,3 +92,14 @@ then
81
92
  export usdpass
82
93
  fi
83
94
  ```
95
+
96
+ # example - find records
97
+
98
+ ```bash
99
+ $ rusdc find nr "name like 'foo%'" name,description --format mlr
100
+ name description
101
+ foo1 foo QS
102
+ foo2 foo TEST
103
+ ```
104
+
105
+ more examples under [find examples-Wikipage](https://github.com/ogaida/usd/wiki/find-examples) or in the [change_log](https://github.com/ogaida/usd/blob/master/change_log.md)
data/bin/rusdc CHANGED
@@ -89,6 +89,7 @@ class Rusdc < Thor
89
89
  option :nice_time, :type => :boolean, :default => true,:banner => "[true|false]"
90
90
  option :debug, :type => :boolean, :default => false,:banner => "[true|false]"
91
91
  def find(object, wc="", fields="@COMMON_NAME")
92
+ exitcode=0
92
93
  unless (fields =~ /^[\w\_,@]+$/)
93
94
  puts "fields-problem: there must be only letters, numbers, comma, the @-sign or underscore, nothing else!"
94
95
  else
@@ -96,6 +97,7 @@ class Rusdc < Thor
96
97
  mlr_array = []
97
98
  con.debug = options[:debug]
98
99
  e = con.search(object,{'fields' => fields,"wc" => wc})
100
+ exitcode=1 if e.count == 0
99
101
  fields_array=fields.split(/,/)
100
102
  e.each do |elem|
101
103
  # init all requested keys with empty strings, better for mlr format and needed for fields-order
@@ -105,7 +107,7 @@ class Rusdc < Thor
105
107
  elem.keys.each do |elem_key|
106
108
  if options[:nice_time]
107
109
  if elem_key =~ /(date|last_mod|warranty_start|warranty_end|time_stamp)$/
108
- elem[elem_key]=Time.at(elem[elem_key]).to_s
110
+ elem[elem_key]=Time.at(elem[elem_key]).to_s if elem[elem_key] != "" # not empty
109
111
  end
110
112
  end
111
113
  if fields_array.include?(elem_key)
@@ -125,9 +127,11 @@ class Rusdc < Thor
125
127
  case options[:format]
126
128
  when "json"
127
129
  puts mlr
130
+ exit exitcode
128
131
  when "yaml"
129
132
  # keys not sorted, maybe a todo
130
133
  puts e.to_yaml
134
+ exit exitcode
131
135
  when "mlr"
132
136
  # hierfuer muss mlr verfuegbar sein
133
137
  file = Tempfile.new('json')
@@ -136,8 +140,10 @@ class Rusdc < Thor
136
140
  file.close
137
141
  puts `#{cmd}`
138
142
  file.unlink
143
+ exit exitcode
139
144
  else
140
145
  puts "das Format #{options[:format]} ist nicht hinterlegt. Es gibt nur json, yaml oder mlr."
146
+ exit 2
141
147
  end
142
148
  end # fields check
143
149
  end
@@ -166,7 +172,7 @@ class Rusdc < Thor
166
172
  chg_id=loadcon.request("/caisd-rest/chg/COMMON_NAME-#{coname}")["chg"]["@id"]
167
173
  att_nr = loadcon.search("lrel_attachments_changes",{'fields' => "attmnt","wc" => "chg = #{chg_id}"})
168
174
  att_nr.each do |att|
169
- attmnt = loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]
175
+ attmnt = loadcon.request("/caisd-rest/attmnt/#{att["attmnt"]["@id"]}")["attmnt"]
170
176
  filename = attmnt["orig_file_name"]
171
177
  puts "save #{filename}"
172
178
  f = File.open(filename, 'w')
@@ -180,7 +186,7 @@ class Rusdc < Thor
180
186
  def get_attachment_of_ci(ciname, filename)
181
187
  att_nr = loadcon.search("lrel_attachments_nr",{'fields' => "attmnt","wc" => "nr.name = '#{ciname}'"})
182
188
  att_nr.each do |att|
183
- attmnt = loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]
189
+ attmnt = loadcon.request("/caisd-rest/attmnt/#{att["attmnt"]["@id"]}")["attmnt"]
184
190
  if attmnt["orig_file_name"] == filename
185
191
  puts loadcon.request("/caisd-rest/attmnt/#{attmnt["@id"]}/file-resource",{:unchanged => true})
186
192
  end
@@ -192,13 +198,18 @@ class Rusdc < Thor
192
198
  chg_id=loadcon.request("/caisd-rest/chg/COMMON_NAME-#{coname}")["chg"]["@id"]
193
199
  att_nr = loadcon.search("lrel_attachments_changes",{'fields' => "attmnt","wc" => "chg = #{chg_id}"})
194
200
  att_nr.each do |att|
195
- attmnt = loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]
201
+ attmnt = loadcon.request("/caisd-rest/attmnt/#{att["attmnt"]["@id"]}")["attmnt"]
196
202
  if attmnt["orig_file_name"] == filename
197
203
  puts loadcon.request("/caisd-rest/attmnt/#{attmnt["@id"]}/file-resource",{:unchanged => true})
198
204
  end
199
205
  end
200
206
  end
201
207
 
208
+ desc "in_add_2_chg <changeorder> <incident>", "add incident to changeorder"
209
+ def in_add_2_chg(chg, incident)
210
+ invoke('update_ref_attr',['in', incident, 'change', chg])
211
+ end
212
+
202
213
  desc "in_list_child_ins <in>", "list all child-incidents of one incident"
203
214
  def in_list_child_ins(incident)
204
215
  invoke('find',['cr', "parent.ref_num = '#{incident}'", "ref_num"], {:format => "mlr"})
@@ -208,7 +219,7 @@ class Rusdc < Thor
208
219
  def list_attachments_of_ci(ciname)
209
220
  att_nr = loadcon.search("lrel_attachments_nr",{'fields' => "attmnt","wc" => "nr.name = '#{ciname}'"})
210
221
  att_nr.each do |att|
211
- puts loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]["orig_file_name"]
222
+ puts loadcon.request("/caisd-rest/attmnt/#{att["attmnt"]["@id"]}")["attmnt"]["orig_file_name"]
212
223
  end
213
224
  end
214
225
 
@@ -217,7 +228,7 @@ class Rusdc < Thor
217
228
  chg_id=loadcon.request("/caisd-rest/chg/COMMON_NAME-#{coname}")["chg"]["@id"]
218
229
  att_nr = loadcon.search("lrel_attachments_changes",{'fields' => "attmnt","wc" => "chg = #{chg_id}"})
219
230
  att_nr.each do |att|
220
- puts loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]["orig_file_name"]
231
+ puts loadcon.request("/caisd-rest/attmnt/#{att["attmnt"]["@id"]}")["attmnt"]["orig_file_name"]
221
232
  end
222
233
  end
223
234
 
@@ -239,6 +250,29 @@ class Rusdc < Thor
239
250
  puts loadcon.create({:type => "json", :data => json})
240
251
  end
241
252
 
253
+ # $ rusdc find lrel_oenv_orgref "nr.name like 'servername1'" org
254
+ # [{
255
+ # "org": "Orname1"
256
+ # }]
257
+
258
+ desc "nr_add_org <nr> <org>", "add an Organisation to a ConfigurationItem"
259
+ def nr_add_org(nr, org)
260
+ template = ERB.new <<-EOF
261
+ {
262
+ "lrel_oenv_orgref": {
263
+ "nr": {
264
+ "@id": "<%= uid_nr %>"
265
+ },
266
+ "org": {
267
+ "@id": "<%= uid_org %>"
268
+ }
269
+ }
270
+ }
271
+ EOF
272
+ json = template.result_with_hash(:uid_org => loadcon.request("/caisd-rest/org/COMMON_NAME-#{org}")["org"]["@id"], :uid_nr => loadcon.request("/caisd-rest/nr/COMMON_NAME-#{nr}")["nr"]["@id"])
273
+ puts loadcon.create({:type => "json", :data => json})
274
+ end
275
+
242
276
  desc "nr_changes <nr> [inactive-too]", "list all open changeorders of one CI"
243
277
  option :inactive_too, :type => :boolean, :default => false
244
278
  def nr_changes(nr)
@@ -375,7 +409,7 @@ class Rusdc < Thor
375
409
  puts loadcon.update({:type => "json", :data => json})
376
410
  end
377
411
 
378
- desc "update_ref_attr_by_id <obj> <id> <key> <value>", "updates a referenced attribute of one object by id"
412
+ desc "update_ref_attr_by_id <obj> <id> <key> <value_id>", "updates a referenced attribute of one object_id by value-id"
379
413
  def update_ref_attr_by_id(obj, id, k, v)
380
414
  template = ERB.new <<-EOF
381
415
  {
@@ -1,4 +1,106 @@
1
- # changelog
1
+ # rusdc changelog
2
+
3
+ ## 0.2.5.3
4
+
5
+ - neu function : `rusdc nr_add_org <nr> <org> # add an Organisation to a ConfigurationItem`
6
+
7
+ #### fixes:
8
+
9
+ - rusdc - line 110: more robust when querying date fields
10
+
11
+ ## 0.2.4.2
12
+
13
+ the same fixes as in 0.2.4.1 for:
14
+
15
+ ```
16
+ rusdc list_attachments_of_ci <ci_name>
17
+ rusdc list_attachments_of_co <co_name>
18
+ ```
19
+
20
+ ## 0.2.4.1
21
+
22
+ ### fixes
23
+
24
+ - `rusdc get_attachment_of_ci` : attachment with spaces in path could not be downloaded
25
+
26
+ ## 0.2.4
27
+
28
+ - find function has exitcode > 0 if no records has been found
29
+
30
+ ```
31
+ $ rusdc find nr "name = 'not_here'" || echo 'i am not here, please create me'
32
+ []
33
+ i am not here, please create me
34
+ $ rusdc find cnt "last_name = 'Gaida'" && echo 'i am here, you may update me'
35
+ [{
36
+ "@COMMON_NAME": "Gaida, Oliver "
37
+ }]
38
+ i am here, you may update me
39
+ ```
40
+
41
+ ### fixes
42
+
43
+ - `rusdc get_all_attachments_of_co` : attachment with spaces in path could not be downloaded
44
+
45
+ ## 0.2.3
46
+
47
+ - new function `in_add_2_chg` - add incident to changeorder
48
+
49
+ Usage:
50
+
51
+ ```
52
+
53
+ rusdc in_add_2_chg <changeorder> <incident>
54
+ ```
55
+
56
+ Example:
57
+
58
+ ```
59
+ $ rusdc find in "change.chg_ref_num = 'CO000001'" --format mlr
60
+ @COMMON_NAME
61
+ I000001
62
+ I000002
63
+ $ rusdc in_add_2_chg CO000001 I000003
64
+ $ rusdc find in "change.chg_ref_num = 'CO000001'" --format mlr
65
+ @COMMON_NAME
66
+ I000001
67
+ I000002
68
+ I000003
69
+ ```
70
+
71
+ ## 0.2.2
72
+
73
+ - extented function `update_attr`, now you may use a where-clause instead of a `common_name` to filter the object(s) to update
74
+
75
+ Example 1:
76
+
77
+ update many CIs with one statement...b
78
+
79
+ ```bash
80
+ $ rusdc find nr "name like 'server[12]'" name,description --format mlr
81
+ name description
82
+ server1 vorher
83
+ server2 vorher
84
+ $ rusdc update_attr nr "name like 'server[12]'" description "new description"
85
+ $ rusdc find nr "name like 'server[12]'" name,description --format mlr
86
+ name description
87
+ server1 new description
88
+ server2 new description
89
+ ```
90
+
91
+ Example 2:
92
+
93
+ update a CI which has a special attribute value:
94
+
95
+ ```bash
96
+ $ rusdc find nr "serial_number = 'ABC123ABC987'" name,serial_number,warranty_end --format mlr
97
+ name serial_number warranty_end
98
+ server1 ABC123ABC987 2020-11-30 00:00:00 +0100
99
+ $ rusdc update_attr nr "serial_number = 'ABC123ABC987'" warranty_end "01.02.2022"
100
+ $ rusdc find nr "serial_number = 'ABC123ABC987'" name,serial_number,warranty_end --format mlr
101
+ name serial_number warranty_end
102
+ server1 ABC123ABC987 2022-02-01 00:00:00 +0100
103
+ ```
2
104
 
3
105
  ## 0.2.1
4
106
 
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'usd'
3
- spec.version = '0.2.2'
4
- spec.date = '2019-11-26'
3
+ spec.version = '0.2.5.3'
4
+ spec.date = '2020-07-15'
5
5
  spec.summary = "SDM REST-API-Calls"
6
6
  spec.description = "a Ruby class and a commandlinetool for SDM REST-API-Calls"
7
7
  spec.authors = ["Oliver Gaida"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Gaida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-26 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor