lex-service_now 0.2.0 → 0.3.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 +4 -4
- data/lib/legion/extensions/service_now/access_control/runners/access_control.rb +54 -0
- data/lib/legion/extensions/service_now/calendar/runners/calendar.rb +60 -0
- data/lib/legion/extensions/service_now/catalog_task/runners/catalog_task.rb +51 -0
- data/lib/legion/extensions/service_now/change/runners/change.rb +4 -4
- data/lib/legion/extensions/service_now/ci_relationship/runners/ci_relationship.rb +52 -0
- data/lib/legion/extensions/service_now/client.rb +18 -0
- data/lib/legion/extensions/service_now/cmdb_health/runners/cmdb_health.rb +48 -0
- data/lib/legion/extensions/service_now/currency/runners/currency.rb +40 -0
- data/lib/legion/extensions/service_now/deprecation_log/runners/deprecation_log.rb +43 -0
- data/lib/legion/extensions/service_now/errors.rb +26 -0
- data/lib/legion/extensions/service_now/helpers/client.rb +32 -0
- data/lib/legion/extensions/service_now/helpers/pagination.rb +31 -0
- data/lib/legion/extensions/service_now/helpers/retry.rb +32 -0
- data/lib/legion/extensions/service_now/knowledge_base/runners/knowledge_base.rb +64 -0
- data/lib/legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback.rb +45 -0
- data/lib/legion/extensions/service_now/license/runners/license.rb +44 -0
- data/lib/legion/extensions/service_now/metric/runners/metric.rb +47 -0
- data/lib/legion/extensions/service_now/script_action/runners/script_action.rb +50 -0
- data/lib/legion/extensions/service_now/table/runners/table.rb +4 -2
- data/lib/legion/extensions/service_now/tag/runners/tag.rb +61 -0
- data/lib/legion/extensions/service_now/ui_action/runners/ui_action.rb +53 -0
- data/lib/legion/extensions/service_now/ui_policy/runners/ui_policy.rb +51 -0
- data/lib/legion/extensions/service_now/vendor/runners/vendor.rb +61 -0
- data/lib/legion/extensions/service_now/version.rb +1 -1
- data/lib/legion/extensions/service_now.rb +19 -0
- metadata +20 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7299f2cb64f753600e58b75350804a51164e4ed0b246a0124e9dd691ae813860
|
|
4
|
+
data.tar.gz: 4cdb63326d0a106814c0f6abb67bf819198e0114d299dbf971a3185ed3b75f8c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 619c90c1289c5b046076a55290a5969d51605b5491ad3163a4038de98d99e06294b62774d5a3d24592ec27f0705ab759df3aafca91778be7c6af10f8d0e0d3ea
|
|
7
|
+
data.tar.gz: 3ee2c4fb6921cf67f71139d9a288d6d056302a0b403f63dcb6b809dfb3667ca00b7689255e5ade8bb188d618a97169338b71673b7c8febb99401ca7e2e493374
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module AccessControl
|
|
7
|
+
module Runners
|
|
8
|
+
module AccessControl
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_acls(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/sys_security_acl', params)
|
|
16
|
+
{ acls: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_acl(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/sys_security_acl/#{sys_id}")
|
|
21
|
+
{ acl: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_acl(name:, type:, operation:, active: true,
|
|
25
|
+
script: nil, condition: nil, **)
|
|
26
|
+
body = { name: name, type: type, operation: operation, active: active }
|
|
27
|
+
body[:script] = script if script
|
|
28
|
+
body[:condition] = condition if condition
|
|
29
|
+
resp = connection(**).post('/api/now/table/sys_security_acl', body)
|
|
30
|
+
{ acl: resp.body['result'] }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def update_acl(sys_id:, active: nil, script: nil, condition: nil, **)
|
|
34
|
+
body = {}
|
|
35
|
+
body[:active] = active unless active.nil?
|
|
36
|
+
body[:script] = script if script
|
|
37
|
+
body[:condition] = condition if condition
|
|
38
|
+
resp = connection(**).patch("/api/now/table/sys_security_acl/#{sys_id}", body)
|
|
39
|
+
{ acl: resp.body['result'] }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def delete_acl(sys_id:, **)
|
|
43
|
+
resp = connection(**).delete("/api/now/table/sys_security_acl/#{sys_id}")
|
|
44
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
48
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Calendar
|
|
7
|
+
module Runners
|
|
8
|
+
module Calendar
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_schedules(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/cmn_schedule', params)
|
|
16
|
+
{ schedules: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_schedule(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/cmn_schedule/#{sys_id}")
|
|
21
|
+
{ schedule: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_schedule(name:, type: 'include', time_zone: nil, **)
|
|
25
|
+
body = { name: name, type: type }
|
|
26
|
+
body[:time_zone] = time_zone if time_zone
|
|
27
|
+
resp = connection(**).post('/api/now/table/cmn_schedule', body)
|
|
28
|
+
{ schedule: resp.body['result'] }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_schedule(sys_id:, name: nil, time_zone: nil, **)
|
|
32
|
+
body = {}
|
|
33
|
+
body[:name] = name if name
|
|
34
|
+
body[:time_zone] = time_zone if time_zone
|
|
35
|
+
resp = connection(**).patch("/api/now/table/cmn_schedule/#{sys_id}", body)
|
|
36
|
+
{ schedule: resp.body['result'] }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def delete_schedule(sys_id:, **)
|
|
40
|
+
resp = connection(**).delete("/api/now/table/cmn_schedule/#{sys_id}")
|
|
41
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def list_schedule_entries(schedule_sys_id:, sysparm_limit: 100, **)
|
|
45
|
+
params = {
|
|
46
|
+
sysparm_query: "schedule=#{schedule_sys_id}",
|
|
47
|
+
sysparm_limit: sysparm_limit
|
|
48
|
+
}
|
|
49
|
+
resp = connection(**).get('/api/now/table/cmn_schedule_span', params)
|
|
50
|
+
{ entries: resp.body['result'] }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
54
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module CatalogTask
|
|
7
|
+
module Runners
|
|
8
|
+
module CatalogTask
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_catalog_tasks(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, request_item: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
if request_item
|
|
15
|
+
params[:sysparm_query] = "request_item=#{request_item}"
|
|
16
|
+
elsif sysparm_query
|
|
17
|
+
params[:sysparm_query] = sysparm_query
|
|
18
|
+
end
|
|
19
|
+
resp = connection(**).get('/api/now/table/sc_task', params)
|
|
20
|
+
{ catalog_tasks: resp.body['result'] }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def get_catalog_task(sys_id:, **)
|
|
24
|
+
resp = connection(**).get("/api/now/table/sc_task/#{sys_id}")
|
|
25
|
+
{ catalog_task: resp.body['result'] }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update_catalog_task(sys_id:, state: nil, assigned_to: nil,
|
|
29
|
+
work_notes: nil, **)
|
|
30
|
+
body = {}
|
|
31
|
+
body[:state] = state if state
|
|
32
|
+
body[:assigned_to] = assigned_to if assigned_to
|
|
33
|
+
body[:work_notes] = work_notes if work_notes
|
|
34
|
+
resp = connection(**).patch("/api/now/table/sc_task/#{sys_id}", body)
|
|
35
|
+
{ catalog_task: resp.body['result'] }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def close_catalog_task(sys_id:, close_notes:, **)
|
|
39
|
+
body = { state: '3', close_notes: close_notes }
|
|
40
|
+
resp = connection(**).patch("/api/now/table/sc_task/#{sys_id}", body)
|
|
41
|
+
{ catalog_task: resp.body['result'] }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
45
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -65,18 +65,18 @@ module Legion
|
|
|
65
65
|
{ deleted: resp.status == 204, id: id }
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
def
|
|
68
|
+
def list_change_tasks(id:, **)
|
|
69
69
|
resp = connection(**).get("/api/sn_chg_rest/change/#{id}/task")
|
|
70
70
|
{ tasks: resp.body['result'] }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
def
|
|
73
|
+
def create_change_task(id:, short_description:, **)
|
|
74
74
|
body = { short_description: short_description }
|
|
75
75
|
resp = connection(**).post("/api/sn_chg_rest/change/#{id}/task", body)
|
|
76
76
|
{ task: resp.body['result'] }
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
def
|
|
79
|
+
def update_change_task(id:, task_id:, short_description: nil, state: nil, assigned_to: nil, **)
|
|
80
80
|
body = {}
|
|
81
81
|
body[:short_description] = short_description if short_description
|
|
82
82
|
body[:state] = state if state
|
|
@@ -85,7 +85,7 @@ module Legion
|
|
|
85
85
|
{ task: resp.body['result'] }
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
-
def
|
|
88
|
+
def delete_change_task(id:, task_id:, **)
|
|
89
89
|
resp = connection(**).delete("/api/sn_chg_rest/change/#{id}/task/#{task_id}")
|
|
90
90
|
{ deleted: resp.status == 204, task_id: task_id }
|
|
91
91
|
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module CiRelationship
|
|
7
|
+
module Runners
|
|
8
|
+
module CiRelationship
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_relationship_types(sysparm_limit: 100, sysparm_offset: 0, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
resp = connection(**).get('/api/now/table/cmdb_rel_type', params)
|
|
14
|
+
{ relationship_types: resp.body['result'] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_relationship_type(sys_id:, **)
|
|
18
|
+
resp = connection(**).get("/api/now/table/cmdb_rel_type/#{sys_id}")
|
|
19
|
+
{ relationship_type: resp.body['result'] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_ci_relationships(sysparm_limit: 100, sysparm_offset: 0,
|
|
23
|
+
parent: nil, child: nil, sysparm_query: nil, **)
|
|
24
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
25
|
+
query_parts = []
|
|
26
|
+
query_parts << "parent=#{parent}" if parent
|
|
27
|
+
query_parts << "child=#{child}" if child
|
|
28
|
+
query_parts << sysparm_query if sysparm_query
|
|
29
|
+
params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
|
|
30
|
+
resp = connection(**).get('/api/now/table/cmdb_rel_ci', params)
|
|
31
|
+
{ relationships: resp.body['result'] }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create_ci_relationship(parent:, child:, type:, **)
|
|
35
|
+
body = { parent: parent, child: child, type: type }
|
|
36
|
+
resp = connection(**).post('/api/now/table/cmdb_rel_ci', body)
|
|
37
|
+
{ relationship: resp.body['result'] }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def delete_ci_relationship(sys_id:, **)
|
|
41
|
+
resp = connection(**).delete("/api/now/table/cmdb_rel_ci/#{sys_id}")
|
|
42
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
46
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -5,6 +5,8 @@ module Legion
|
|
|
5
5
|
module ServiceNow
|
|
6
6
|
class Client
|
|
7
7
|
include Helpers::Client
|
|
8
|
+
include Helpers::Pagination
|
|
9
|
+
include Helpers::Retry
|
|
8
10
|
include Change::Runners::Change
|
|
9
11
|
include Cmdb::Instance::Runners::Instance
|
|
10
12
|
include Cmdb::Meta::Runners::Meta
|
|
@@ -51,6 +53,22 @@ module Legion
|
|
|
51
53
|
include MidServer::Runners::MidServer
|
|
52
54
|
include CatalogVariable::Runners::CatalogVariable
|
|
53
55
|
include Workflow::Runners::Workflow
|
|
56
|
+
include Vendor::Runners::Vendor
|
|
57
|
+
include CiRelationship::Runners::CiRelationship
|
|
58
|
+
include ScriptAction::Runners::ScriptAction
|
|
59
|
+
include UiPolicy::Runners::UiPolicy
|
|
60
|
+
include UiAction::Runners::UiAction
|
|
61
|
+
include AccessControl::Runners::AccessControl
|
|
62
|
+
include CatalogTask::Runners::CatalogTask
|
|
63
|
+
include KnowledgeBase::Runners::KnowledgeBase
|
|
64
|
+
include Tag::Runners::Tag
|
|
65
|
+
include Metric::Runners::Metric
|
|
66
|
+
include Currency::Runners::Currency
|
|
67
|
+
include Calendar::Runners::Calendar
|
|
68
|
+
include KnowledgeFeedback::Runners::KnowledgeFeedback
|
|
69
|
+
include License::Runners::License
|
|
70
|
+
include DeprecationLog::Runners::DeprecationLog
|
|
71
|
+
include CmdbHealth::Runners::CmdbHealth
|
|
54
72
|
|
|
55
73
|
attr_reader :opts
|
|
56
74
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module CmdbHealth
|
|
7
|
+
module Runners
|
|
8
|
+
module CmdbHealth
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_health_rules(sysparm_limit: 100, sysparm_offset: 0, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
resp = connection(**).get('/api/now/table/sa_m2m_suggested_relationship', params)
|
|
14
|
+
{ health_rules: resp.body['result'] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_cmdb_health_dashboard(**)
|
|
18
|
+
resp = connection(**).get('/api/now/cmdb/health_dashboard')
|
|
19
|
+
{ dashboard: resp.body['result'] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_duplicate_cis(class_name:, sysparm_limit: 100, **)
|
|
23
|
+
params = {
|
|
24
|
+
sysparm_query: "sys_class_name=#{class_name}",
|
|
25
|
+
sysparm_limit: sysparm_limit
|
|
26
|
+
}
|
|
27
|
+
resp = connection(**).get('/api/now/table/cmdb_duplicate', params)
|
|
28
|
+
{ duplicates: resp.body['result'] }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def list_stale_cis(class_name:, days_since_discovery: 30, **)
|
|
32
|
+
cutoff = (::Time.now - (days_since_discovery * 86_400)).strftime('%Y-%m-%d %H:%M:%S')
|
|
33
|
+
params = {
|
|
34
|
+
sysparm_query: "sys_class_name=#{class_name}^last_discovered<#{cutoff}",
|
|
35
|
+
sysparm_limit: 100
|
|
36
|
+
}
|
|
37
|
+
resp = connection(**).get('/api/now/table/cmdb_ci', params)
|
|
38
|
+
{ stale_cis: resp.body['result'] }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
42
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Currency
|
|
7
|
+
module Runners
|
|
8
|
+
module Currency
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_currencies(sysparm_limit: 100, sysparm_offset: 0, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
resp = connection(**).get('/api/now/table/fx_currency', params)
|
|
14
|
+
{ currencies: resp.body['result'] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_currency(sys_id:, **)
|
|
18
|
+
resp = connection(**).get("/api/now/table/fx_currency/#{sys_id}")
|
|
19
|
+
{ currency: resp.body['result'] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_exchange_rates(from_currency: nil, to_currency: nil,
|
|
23
|
+
sysparm_limit: 100, **)
|
|
24
|
+
params = { sysparm_limit: sysparm_limit }
|
|
25
|
+
query_parts = []
|
|
26
|
+
query_parts << "from_cur=#{from_currency}" if from_currency
|
|
27
|
+
query_parts << "to_cur=#{to_currency}" if to_currency
|
|
28
|
+
params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
|
|
29
|
+
resp = connection(**).get('/api/now/table/fx_rate', params)
|
|
30
|
+
{ exchange_rates: resp.body['result'] }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
34
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module DeprecationLog
|
|
7
|
+
module Runners
|
|
8
|
+
module DeprecationLog
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_upgrade_logs(sysparm_limit: 100, sysparm_offset: 0, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
resp = connection(**).get('/api/now/table/sys_upgrade_history', params)
|
|
14
|
+
{ upgrade_logs: resp.body['result'] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_upgrade_log(sys_id:, **)
|
|
18
|
+
resp = connection(**).get("/api/now/table/sys_upgrade_history/#{sys_id}")
|
|
19
|
+
{ upgrade_log: resp.body['result'] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_upgrade_skips(sysparm_limit: 100, **)
|
|
23
|
+
params = { sysparm_limit: sysparm_limit }
|
|
24
|
+
resp = connection(**).get('/api/now/table/sys_upgrade_skip', params)
|
|
25
|
+
{ upgrade_skips: resp.body['result'] }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def list_deprecation_entries(sysparm_limit: 100, sysparm_offset: 0,
|
|
29
|
+
sysparm_query: nil, **)
|
|
30
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
31
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
32
|
+
resp = connection(**).get('/api/now/table/sys_deprecation_log', params)
|
|
33
|
+
{ deprecation_entries: resp.body['result'] }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
37
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Errors
|
|
7
|
+
class ServiceNowError < StandardError
|
|
8
|
+
attr_reader :status, :detail
|
|
9
|
+
|
|
10
|
+
def initialize(message, status: nil, detail: nil)
|
|
11
|
+
super(message)
|
|
12
|
+
@status = status
|
|
13
|
+
@detail = detail
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class AuthenticationError < ServiceNowError; end
|
|
18
|
+
class AuthorizationError < ServiceNowError; end
|
|
19
|
+
class NotFoundError < ServiceNowError; end
|
|
20
|
+
class UnprocessableError < ServiceNowError; end
|
|
21
|
+
class RateLimitError < ServiceNowError; end
|
|
22
|
+
class ServerError < ServiceNowError; end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -38,6 +38,38 @@ module Legion
|
|
|
38
38
|
resp.body['access_token']
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
|
+
|
|
42
|
+
def handle_response(resp)
|
|
43
|
+
case resp.status
|
|
44
|
+
when 200, 201, 202, 204
|
|
45
|
+
resp
|
|
46
|
+
when 401
|
|
47
|
+
raise Errors::AuthenticationError.new(error_message(resp), status: 401, detail: resp.body)
|
|
48
|
+
when 403
|
|
49
|
+
raise Errors::AuthorizationError.new(error_message(resp), status: 403, detail: resp.body)
|
|
50
|
+
when 404
|
|
51
|
+
raise Errors::NotFoundError.new(error_message(resp), status: 404, detail: resp.body)
|
|
52
|
+
when 422
|
|
53
|
+
raise Errors::UnprocessableError.new(error_message(resp), status: 422, detail: resp.body)
|
|
54
|
+
when 429
|
|
55
|
+
raise Errors::RateLimitError.new(error_message(resp), status: 429, detail: resp.body)
|
|
56
|
+
when 500..599
|
|
57
|
+
raise Errors::ServerError.new(error_message(resp), status: resp.status, detail: resp.body)
|
|
58
|
+
else
|
|
59
|
+
raise Errors::ServiceNowError.new(error_message(resp), status: resp.status, detail: resp.body)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def error_message(resp)
|
|
66
|
+
body = resp.body
|
|
67
|
+
return "ServiceNow error (#{resp.status})" unless body.is_a?(Hash)
|
|
68
|
+
|
|
69
|
+
msg = body.dig('error', 'message') || body.dig('error', 'detail') ||
|
|
70
|
+
body['error'] || body['message'] || "ServiceNow error (#{resp.status})"
|
|
71
|
+
msg.to_s
|
|
72
|
+
end
|
|
41
73
|
end
|
|
42
74
|
end
|
|
43
75
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Helpers
|
|
7
|
+
module Pagination
|
|
8
|
+
def paginate(method_name, **opts)
|
|
9
|
+
results = []
|
|
10
|
+
offset = 0
|
|
11
|
+
limit = opts.fetch(:sysparm_limit, 100)
|
|
12
|
+
|
|
13
|
+
loop do
|
|
14
|
+
response = public_send(method_name, **opts, sysparm_limit: limit, sysparm_offset: offset)
|
|
15
|
+
key = response.keys.first
|
|
16
|
+
batch = response[key]
|
|
17
|
+
break if batch.nil? || batch.empty?
|
|
18
|
+
|
|
19
|
+
results.concat(batch)
|
|
20
|
+
break if batch.size < limit
|
|
21
|
+
|
|
22
|
+
offset += limit
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
results
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Helpers
|
|
7
|
+
module Retry
|
|
8
|
+
MAX_RETRIES = 3
|
|
9
|
+
BASE_DELAY = 1.0
|
|
10
|
+
|
|
11
|
+
def with_retry(max_retries: MAX_RETRIES)
|
|
12
|
+
attempts = 0
|
|
13
|
+
begin
|
|
14
|
+
attempts += 1
|
|
15
|
+
yield
|
|
16
|
+
rescue Errors::RateLimitError => e
|
|
17
|
+
raise e if attempts >= max_retries
|
|
18
|
+
|
|
19
|
+
sleep(BASE_DELAY * (2**(attempts - 1)))
|
|
20
|
+
retry
|
|
21
|
+
rescue Errors::ServerError => e
|
|
22
|
+
raise e if attempts >= max_retries
|
|
23
|
+
|
|
24
|
+
sleep(BASE_DELAY)
|
|
25
|
+
retry
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module KnowledgeBase
|
|
7
|
+
module Runners
|
|
8
|
+
module KnowledgeBase
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_knowledge_bases(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/kb_knowledge_base', params)
|
|
16
|
+
{ knowledge_bases: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_knowledge_base(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/kb_knowledge_base/#{sys_id}")
|
|
21
|
+
{ knowledge_base: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_knowledge_base(title:, description: nil, owner: nil,
|
|
25
|
+
active: true, **)
|
|
26
|
+
body = { title: title, active: active }
|
|
27
|
+
body[:description] = description if description
|
|
28
|
+
body[:owner] = owner if owner
|
|
29
|
+
resp = connection(**).post('/api/now/table/kb_knowledge_base', body)
|
|
30
|
+
{ knowledge_base: resp.body['result'] }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def update_knowledge_base(sys_id:, title: nil, description: nil,
|
|
34
|
+
active: nil, **)
|
|
35
|
+
body = {}
|
|
36
|
+
body[:title] = title if title
|
|
37
|
+
body[:description] = description if description
|
|
38
|
+
body[:active] = active unless active.nil?
|
|
39
|
+
resp = connection(**).patch("/api/now/table/kb_knowledge_base/#{sys_id}", body)
|
|
40
|
+
{ knowledge_base: resp.body['result'] }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def delete_knowledge_base(sys_id:, **)
|
|
44
|
+
resp = connection(**).delete("/api/now/table/kb_knowledge_base/#{sys_id}")
|
|
45
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def list_kb_categories(knowledge_base_sys_id:, sysparm_limit: 100, **)
|
|
49
|
+
params = {
|
|
50
|
+
sysparm_query: "kb_knowledge_base=#{knowledge_base_sys_id}",
|
|
51
|
+
sysparm_limit: sysparm_limit
|
|
52
|
+
}
|
|
53
|
+
resp = connection(**).get('/api/now/table/kb_category', params)
|
|
54
|
+
{ categories: resp.body['result'] }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
58
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module KnowledgeFeedback
|
|
7
|
+
module Runners
|
|
8
|
+
module KnowledgeFeedback
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_knowledge_feedback(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
article: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = "article=#{article}" if article
|
|
15
|
+
resp = connection(**).get('/api/now/table/kb_feedback', params)
|
|
16
|
+
{ feedback: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_knowledge_feedback(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/kb_feedback/#{sys_id}")
|
|
21
|
+
{ feedback: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_knowledge_feedback(article:, rating:, comments: nil, **)
|
|
25
|
+
body = { article: article, rating: rating }
|
|
26
|
+
body[:comments] = comments if comments
|
|
27
|
+
resp = connection(**).post('/api/now/table/kb_feedback', body)
|
|
28
|
+
{ feedback: resp.body['result'] }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def list_knowledge_views(article: nil, sysparm_limit: 100, **)
|
|
32
|
+
params = { sysparm_limit: sysparm_limit }
|
|
33
|
+
params[:sysparm_query] = "article=#{article}" if article
|
|
34
|
+
resp = connection(**).get('/api/now/table/kb_view', params)
|
|
35
|
+
{ views: resp.body['result'] }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
39
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module License
|
|
7
|
+
module Runners
|
|
8
|
+
module License
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_licenses(sysparm_limit: 100, sysparm_offset: 0, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
resp = connection(**).get('/api/now/table/license_agreement', params)
|
|
14
|
+
{ licenses: resp.body['result'] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_license(sys_id:, **)
|
|
18
|
+
resp = connection(**).get("/api/now/table/license_agreement/#{sys_id}")
|
|
19
|
+
{ license: resp.body['result'] }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_license_allocations(license_sys_id: nil, sysparm_limit: 100, **)
|
|
23
|
+
params = { sysparm_limit: sysparm_limit }
|
|
24
|
+
params[:sysparm_query] = "license_agreement=#{license_sys_id}" if license_sys_id
|
|
25
|
+
resp = connection(**).get('/api/now/table/license_allocation', params)
|
|
26
|
+
{ allocations: resp.body['result'] }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def list_installed_software(sysparm_limit: 100, sysparm_offset: 0,
|
|
30
|
+
sysparm_query: nil, **)
|
|
31
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
32
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
33
|
+
resp = connection(**).get('/api/now/table/cmdb_sam_sw_install', params)
|
|
34
|
+
{ installations: resp.body['result'] }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
38
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Metric
|
|
7
|
+
module Runners
|
|
8
|
+
module Metric
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_metric_definitions(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/metric_definition', params)
|
|
16
|
+
{ metric_definitions: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_metric_definition(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/metric_definition/#{sys_id}")
|
|
21
|
+
{ metric_definition: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def list_metric_instances(metric_sys_id: nil, table: nil,
|
|
25
|
+
sysparm_limit: 100, sysparm_offset: 0, **)
|
|
26
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
27
|
+
query_parts = []
|
|
28
|
+
query_parts << "metric_definition=#{metric_sys_id}" if metric_sys_id
|
|
29
|
+
query_parts << "table=#{table}" if table
|
|
30
|
+
params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
|
|
31
|
+
resp = connection(**).get('/api/now/table/metric_instance', params)
|
|
32
|
+
{ metric_instances: resp.body['result'] }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def get_metric_instance(sys_id:, **)
|
|
36
|
+
resp = connection(**).get("/api/now/table/metric_instance/#{sys_id}")
|
|
37
|
+
{ metric_instance: resp.body['result'] }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
41
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module ScriptAction
|
|
7
|
+
module Runners
|
|
8
|
+
module ScriptAction
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_script_actions(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/sysevent_script_action', params)
|
|
16
|
+
{ script_actions: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_script_action(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/sysevent_script_action/#{sys_id}")
|
|
21
|
+
{ script_action: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_script_action(name:, event_name:, script:, active: true, **)
|
|
25
|
+
body = { name: name, event_name: event_name, script: script, active: active }
|
|
26
|
+
resp = connection(**).post('/api/now/table/sysevent_script_action', body)
|
|
27
|
+
{ script_action: resp.body['result'] }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def update_script_action(sys_id:, script: nil, active: nil, **)
|
|
31
|
+
body = {}
|
|
32
|
+
body[:script] = script if script
|
|
33
|
+
body[:active] = active unless active.nil?
|
|
34
|
+
resp = connection(**).patch("/api/now/table/sysevent_script_action/#{sys_id}", body)
|
|
35
|
+
{ script_action: resp.body['result'] }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def delete_script_action(sys_id:, **)
|
|
39
|
+
resp = connection(**).delete("/api/now/table/sysevent_script_action/#{sys_id}")
|
|
40
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
44
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -30,12 +30,14 @@ module Legion
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def table_create(table_name:, **fields)
|
|
33
|
-
|
|
33
|
+
body = fields.except(:url, :client_id, :client_secret, :token, :username, :password)
|
|
34
|
+
resp = connection(**fields).post("/api/now/table/#{table_name}", body)
|
|
34
35
|
{ record: resp.body['result'] }
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def table_update(table_name:, sys_id:, **fields)
|
|
38
|
-
|
|
39
|
+
body = fields.except(:url, :client_id, :client_secret, :token, :username, :password, :sys_id)
|
|
40
|
+
resp = connection(**fields).patch("/api/now/table/#{table_name}/#{sys_id}", body)
|
|
39
41
|
{ record: resp.body['result'] }
|
|
40
42
|
end
|
|
41
43
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Tag
|
|
7
|
+
module Runners
|
|
8
|
+
module Tag
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_tags(sysparm_limit: 100, sysparm_offset: 0, sysparm_query: nil, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
14
|
+
resp = connection(**).get('/api/now/table/label', params)
|
|
15
|
+
{ tags: resp.body['result'] }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_tag(sys_id:, **)
|
|
19
|
+
resp = connection(**).get("/api/now/table/label/#{sys_id}")
|
|
20
|
+
{ tag: resp.body['result'] }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def create_tag(name:, color: nil, **)
|
|
24
|
+
body = { name: name }
|
|
25
|
+
body[:color] = color if color
|
|
26
|
+
resp = connection(**).post('/api/now/table/label', body)
|
|
27
|
+
{ tag: resp.body['result'] }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def delete_tag(sys_id:, **)
|
|
31
|
+
resp = connection(**).delete("/api/now/table/label/#{sys_id}")
|
|
32
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def list_tagged_records(tag_sys_id:, table_name: nil, sysparm_limit: 100, **)
|
|
36
|
+
query = "label=#{tag_sys_id}"
|
|
37
|
+
query += "^table=#{table_name}" if table_name
|
|
38
|
+
params = { sysparm_query: query, sysparm_limit: sysparm_limit }
|
|
39
|
+
resp = connection(**).get('/api/now/table/label_entry', params)
|
|
40
|
+
{ tagged_records: resp.body['result'] }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def add_tag_to_record(tag_sys_id:, table_name:, record_sys_id:, **)
|
|
44
|
+
body = { label: tag_sys_id, table: table_name, id_display: record_sys_id }
|
|
45
|
+
resp = connection(**).post('/api/now/table/label_entry', body)
|
|
46
|
+
{ tag_entry: resp.body['result'] }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def remove_tag_from_record(tag_entry_sys_id:, **)
|
|
50
|
+
resp = connection(**).delete("/api/now/table/label_entry/#{tag_entry_sys_id}")
|
|
51
|
+
{ deleted: resp.status == 204, sys_id: tag_entry_sys_id }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
55
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module UiAction
|
|
7
|
+
module Runners
|
|
8
|
+
module UiAction
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_ui_actions(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/sys_ui_action', params)
|
|
16
|
+
{ ui_actions: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_ui_action(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/sys_ui_action/#{sys_id}")
|
|
21
|
+
{ ui_action: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_ui_action(name:, table:, script:, action_type: 'button',
|
|
25
|
+
active: true, **)
|
|
26
|
+
body = { name: name, table: table, script: script,
|
|
27
|
+
action_type: action_type, active: active }
|
|
28
|
+
resp = connection(**).post('/api/now/table/sys_ui_action', body)
|
|
29
|
+
{ ui_action: resp.body['result'] }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def update_ui_action(sys_id:, script: nil, active: nil, name: nil, **)
|
|
33
|
+
body = {}
|
|
34
|
+
body[:script] = script if script
|
|
35
|
+
body[:active] = active unless active.nil?
|
|
36
|
+
body[:name] = name if name
|
|
37
|
+
resp = connection(**).patch("/api/now/table/sys_ui_action/#{sys_id}", body)
|
|
38
|
+
{ ui_action: resp.body['result'] }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def delete_ui_action(sys_id:, **)
|
|
42
|
+
resp = connection(**).delete("/api/now/table/sys_ui_action/#{sys_id}")
|
|
43
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
47
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module UiPolicy
|
|
7
|
+
module Runners
|
|
8
|
+
module UiPolicy
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_ui_policies(sysparm_limit: 100, sysparm_offset: 0,
|
|
12
|
+
sysparm_query: nil, **)
|
|
13
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
14
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
15
|
+
resp = connection(**).get('/api/now/table/sys_ui_policy', params)
|
|
16
|
+
{ ui_policies: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_ui_policy(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/sys_ui_policy/#{sys_id}")
|
|
21
|
+
{ ui_policy: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_ui_policy(table:, short_description:, script: nil, active: true, **)
|
|
25
|
+
body = { table: table, short_description: short_description, active: active }
|
|
26
|
+
body[:script] = script if script
|
|
27
|
+
resp = connection(**).post('/api/now/table/sys_ui_policy', body)
|
|
28
|
+
{ ui_policy: resp.body['result'] }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_ui_policy(sys_id:, active: nil, script: nil, **)
|
|
32
|
+
body = {}
|
|
33
|
+
body[:active] = active unless active.nil?
|
|
34
|
+
body[:script] = script if script
|
|
35
|
+
resp = connection(**).patch("/api/now/table/sys_ui_policy/#{sys_id}", body)
|
|
36
|
+
{ ui_policy: resp.body['result'] }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def delete_ui_policy(sys_id:, **)
|
|
40
|
+
resp = connection(**).delete("/api/now/table/sys_ui_policy/#{sys_id}")
|
|
41
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
45
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module ServiceNow
|
|
6
|
+
module Vendor
|
|
7
|
+
module Runners
|
|
8
|
+
module Vendor
|
|
9
|
+
include Legion::Extensions::ServiceNow::Helpers::Client
|
|
10
|
+
|
|
11
|
+
def list_vendors(sysparm_limit: 100, sysparm_offset: 0, sysparm_query: nil, **)
|
|
12
|
+
params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
|
|
13
|
+
params[:sysparm_query] = sysparm_query if sysparm_query
|
|
14
|
+
resp = connection(**).get('/api/now/table/core_company',
|
|
15
|
+
params.merge(sysparm_query: build_vendor_query(sysparm_query)))
|
|
16
|
+
{ vendors: resp.body['result'] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_vendor(sys_id:, **)
|
|
20
|
+
resp = connection(**).get("/api/now/table/core_company/#{sys_id}")
|
|
21
|
+
{ vendor: resp.body['result'] }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_vendor(name:, phone: nil, website: nil, vendor_type: nil, **)
|
|
25
|
+
body = { name: name, vendor: true }
|
|
26
|
+
body[:phone] = phone if phone
|
|
27
|
+
body[:website] = website if website
|
|
28
|
+
body[:vendor_type] = vendor_type if vendor_type
|
|
29
|
+
resp = connection(**).post('/api/now/table/core_company', body)
|
|
30
|
+
{ vendor: resp.body['result'] }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def update_vendor(sys_id:, name: nil, phone: nil, website: nil, **)
|
|
34
|
+
body = {}
|
|
35
|
+
body[:name] = name if name
|
|
36
|
+
body[:phone] = phone if phone
|
|
37
|
+
body[:website] = website if website
|
|
38
|
+
resp = connection(**).patch("/api/now/table/core_company/#{sys_id}", body)
|
|
39
|
+
{ vendor: resp.body['result'] }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def delete_vendor(sys_id:, **)
|
|
43
|
+
resp = connection(**).delete("/api/now/table/core_company/#{sys_id}")
|
|
44
|
+
{ deleted: resp.status == 204, sys_id: sys_id }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def build_vendor_query(extra_query)
|
|
50
|
+
base = 'vendor=true'
|
|
51
|
+
extra_query ? "#{base}^#{extra_query}" : base
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
|
|
55
|
+
Legion::Extensions::Helpers.const_defined?(:Lex, false)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'legion/extensions/service_now/version'
|
|
4
|
+
require 'legion/extensions/service_now/errors'
|
|
4
5
|
require 'legion/extensions/service_now/helpers/client'
|
|
6
|
+
require 'legion/extensions/service_now/helpers/pagination'
|
|
7
|
+
require 'legion/extensions/service_now/helpers/retry'
|
|
5
8
|
|
|
6
9
|
require 'legion/extensions/service_now/change/runners/change'
|
|
7
10
|
require 'legion/extensions/service_now/cmdb/instance/runners/instance'
|
|
@@ -49,6 +52,22 @@ require 'legion/extensions/service_now/discovery/runners/discovery'
|
|
|
49
52
|
require 'legion/extensions/service_now/mid_server/runners/mid_server'
|
|
50
53
|
require 'legion/extensions/service_now/catalog_variable/runners/catalog_variable'
|
|
51
54
|
require 'legion/extensions/service_now/workflow/runners/workflow'
|
|
55
|
+
require 'legion/extensions/service_now/vendor/runners/vendor'
|
|
56
|
+
require 'legion/extensions/service_now/ci_relationship/runners/ci_relationship'
|
|
57
|
+
require 'legion/extensions/service_now/script_action/runners/script_action'
|
|
58
|
+
require 'legion/extensions/service_now/ui_policy/runners/ui_policy'
|
|
59
|
+
require 'legion/extensions/service_now/ui_action/runners/ui_action'
|
|
60
|
+
require 'legion/extensions/service_now/access_control/runners/access_control'
|
|
61
|
+
require 'legion/extensions/service_now/catalog_task/runners/catalog_task'
|
|
62
|
+
require 'legion/extensions/service_now/knowledge_base/runners/knowledge_base'
|
|
63
|
+
require 'legion/extensions/service_now/tag/runners/tag'
|
|
64
|
+
require 'legion/extensions/service_now/metric/runners/metric'
|
|
65
|
+
require 'legion/extensions/service_now/currency/runners/currency'
|
|
66
|
+
require 'legion/extensions/service_now/calendar/runners/calendar'
|
|
67
|
+
require 'legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback'
|
|
68
|
+
require 'legion/extensions/service_now/license/runners/license'
|
|
69
|
+
require 'legion/extensions/service_now/deprecation_log/runners/deprecation_log'
|
|
70
|
+
require 'legion/extensions/service_now/cmdb_health/runners/cmdb_health'
|
|
52
71
|
|
|
53
72
|
require 'legion/extensions/service_now/client'
|
|
54
73
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-service_now
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -157,6 +157,7 @@ files:
|
|
|
157
157
|
- Rakefile
|
|
158
158
|
- lex-service_now.gemspec
|
|
159
159
|
- lib/legion/extensions/service_now.rb
|
|
160
|
+
- lib/legion/extensions/service_now/access_control/runners/access_control.rb
|
|
160
161
|
- lib/legion/extensions/service_now/account/runners/account.rb
|
|
161
162
|
- lib/legion/extensions/service_now/aggregate/runners/aggregate.rb
|
|
162
163
|
- lib/legion/extensions/service_now/approval/runners/approval.rb
|
|
@@ -164,25 +165,38 @@ files:
|
|
|
164
165
|
- lib/legion/extensions/service_now/attachment/runners/attachment.rb
|
|
165
166
|
- lib/legion/extensions/service_now/audit/runners/audit.rb
|
|
166
167
|
- lib/legion/extensions/service_now/business_rule/runners/business_rule.rb
|
|
168
|
+
- lib/legion/extensions/service_now/calendar/runners/calendar.rb
|
|
169
|
+
- lib/legion/extensions/service_now/catalog_task/runners/catalog_task.rb
|
|
167
170
|
- lib/legion/extensions/service_now/catalog_variable/runners/catalog_variable.rb
|
|
168
171
|
- lib/legion/extensions/service_now/change/runners/change.rb
|
|
172
|
+
- lib/legion/extensions/service_now/ci_relationship/runners/ci_relationship.rb
|
|
169
173
|
- lib/legion/extensions/service_now/client.rb
|
|
170
174
|
- lib/legion/extensions/service_now/cmdb/instance/runners/instance.rb
|
|
171
175
|
- lib/legion/extensions/service_now/cmdb/meta/runners/meta.rb
|
|
176
|
+
- lib/legion/extensions/service_now/cmdb_health/runners/cmdb_health.rb
|
|
172
177
|
- lib/legion/extensions/service_now/company/runners/company.rb
|
|
173
178
|
- lib/legion/extensions/service_now/contract/runners/contract.rb
|
|
174
179
|
- lib/legion/extensions/service_now/cost_center/runners/cost_center.rb
|
|
180
|
+
- lib/legion/extensions/service_now/currency/runners/currency.rb
|
|
175
181
|
- lib/legion/extensions/service_now/department/runners/department.rb
|
|
182
|
+
- lib/legion/extensions/service_now/deprecation_log/runners/deprecation_log.rb
|
|
176
183
|
- lib/legion/extensions/service_now/discovery/runners/discovery.rb
|
|
177
184
|
- lib/legion/extensions/service_now/email_log/runners/email_log.rb
|
|
185
|
+
- lib/legion/extensions/service_now/errors.rb
|
|
178
186
|
- lib/legion/extensions/service_now/event/runners/event.rb
|
|
179
187
|
- lib/legion/extensions/service_now/flow/runners/flow.rb
|
|
180
188
|
- lib/legion/extensions/service_now/helpers/client.rb
|
|
189
|
+
- lib/legion/extensions/service_now/helpers/pagination.rb
|
|
190
|
+
- lib/legion/extensions/service_now/helpers/retry.rb
|
|
181
191
|
- lib/legion/extensions/service_now/hr_case/runners/hr_case.rb
|
|
182
192
|
- lib/legion/extensions/service_now/import_set/runners/import_set.rb
|
|
183
193
|
- lib/legion/extensions/service_now/incident/runners/incident.rb
|
|
184
194
|
- lib/legion/extensions/service_now/knowledge/runners/knowledge.rb
|
|
195
|
+
- lib/legion/extensions/service_now/knowledge_base/runners/knowledge_base.rb
|
|
196
|
+
- lib/legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback.rb
|
|
197
|
+
- lib/legion/extensions/service_now/license/runners/license.rb
|
|
185
198
|
- lib/legion/extensions/service_now/location/runners/location.rb
|
|
199
|
+
- lib/legion/extensions/service_now/metric/runners/metric.rb
|
|
186
200
|
- lib/legion/extensions/service_now/mid_server/runners/mid_server.rb
|
|
187
201
|
- lib/legion/extensions/service_now/notification/runners/notification.rb
|
|
188
202
|
- lib/legion/extensions/service_now/on_call/runners/on_call.rb
|
|
@@ -192,6 +206,7 @@ files:
|
|
|
192
206
|
- lib/legion/extensions/service_now/release/runners/release.rb
|
|
193
207
|
- lib/legion/extensions/service_now/request/runners/request.rb
|
|
194
208
|
- lib/legion/extensions/service_now/scheduled_job/runners/scheduled_job.rb
|
|
209
|
+
- lib/legion/extensions/service_now/script_action/runners/script_action.rb
|
|
195
210
|
- lib/legion/extensions/service_now/script_include/runners/script_include.rb
|
|
196
211
|
- lib/legion/extensions/service_now/security_incident/runners/security_incident.rb
|
|
197
212
|
- lib/legion/extensions/service_now/service_catalog/runners/service_catalog.rb
|
|
@@ -209,10 +224,14 @@ files:
|
|
|
209
224
|
- lib/legion/extensions/service_now/survey/runners/survey.rb
|
|
210
225
|
- lib/legion/extensions/service_now/system_property/runners/system_property.rb
|
|
211
226
|
- lib/legion/extensions/service_now/table/runners/table.rb
|
|
227
|
+
- lib/legion/extensions/service_now/tag/runners/tag.rb
|
|
212
228
|
- lib/legion/extensions/service_now/task/runners/task.rb
|
|
229
|
+
- lib/legion/extensions/service_now/ui_action/runners/ui_action.rb
|
|
230
|
+
- lib/legion/extensions/service_now/ui_policy/runners/ui_policy.rb
|
|
213
231
|
- lib/legion/extensions/service_now/update_set/runners/update_set.rb
|
|
214
232
|
- lib/legion/extensions/service_now/user/runners/user.rb
|
|
215
233
|
- lib/legion/extensions/service_now/user_group/runners/user_group.rb
|
|
234
|
+
- lib/legion/extensions/service_now/vendor/runners/vendor.rb
|
|
216
235
|
- lib/legion/extensions/service_now/version.rb
|
|
217
236
|
- lib/legion/extensions/service_now/work_order/runners/work_order.rb
|
|
218
237
|
- lib/legion/extensions/service_now/workflow/runners/workflow.rb
|