dtk_crd_parser 0.0.39 → 0.0.40
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 +5 -5
- data/lib/crd_parser.rb +14 -1
- data/lib/crd_parser/action.rb +40 -0
- data/lib/crd_parser/base_class/helper_mixins.rb +5 -0
- data/lib/crd_parser/component.rb +8 -11
- data/lib/crd_parser/component/attribute.rb +6 -5
- data/lib/crd_parser/component_def.rb +23 -17
- data/lib/crd_parser/component_def/attribute_type_info.rb +5 -5
- data/lib/crd_parser/error.rb +5 -0
- data/lib/crd_parser/error/usage.rb +6 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7db0223829bb7c53f309e52c808582992490abed7964a65facdc70339e60cb79
|
4
|
+
data.tar.gz: a492d85e80d9fd68a1680961d6482356b5d882d5caf18e58e76066ecd78f25f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30e17286423da409bbedc746db71e2ca00d34145d29596fdedc9247ee1e19d463115b0d3050634b59bda304b1c642c30f8cac6a053caf99159a701fdc5ec4e2b
|
7
|
+
data.tar.gz: 771b3eaf135045ddb093221eef64664933967464d708fce73886fe5d418fb5adcc7df4e64d38edc1813d764b660116872f4ff4c2d9b4ef21fd5ad7c027eed241
|
data/lib/crd_parser.rb
CHANGED
@@ -4,12 +4,25 @@ module DTK
|
|
4
4
|
|
5
5
|
require_relative('crd_parser/component')
|
6
6
|
require_relative('crd_parser/component_def')
|
7
|
-
|
7
|
+
require_relative('crd_parser/action')
|
8
|
+
require_relative('crd_parser/error')
|
9
|
+
|
8
10
|
def self.parse_crd_to_component(client, component_instance, component_name)
|
9
11
|
#component instance has a name and a namespace {name: xxx, namespace: yyy}
|
10
12
|
#client is kube client
|
11
13
|
#component name is, for example, network-aws::vpc[vpc1]
|
12
14
|
Component.create_from_kube(client, component_instance, component_name)
|
13
15
|
end
|
16
|
+
|
17
|
+
def self.parse_crd_to_action(client, component_instance, action_instance)
|
18
|
+
#component instance has a name and a namespace {name: xxx, namespace: yyy}
|
19
|
+
#client is kube client
|
20
|
+
#action instance, for example, {name: xxx, namespace: xxx, id: xxx}
|
21
|
+
Action.create_from_kube(client, component_instance, action_instance)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse_crd_to_executable_action(client, component_instance, component_name)
|
25
|
+
Component.create_from_kube(client, component_instance, component_name)
|
26
|
+
end
|
14
27
|
end
|
15
28
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module DTK::CrdParser
|
2
|
+
class Action < BaseClass
|
3
|
+
|
4
|
+
def initialize(name, id, component)
|
5
|
+
@name = name #action name, for example: create node group members
|
6
|
+
@component = component #this will point to the corresponding component object, example: ec2::node-group[ng]
|
7
|
+
@id = id #action subtask id
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.create_from_kube(client, component_instance, action_instance)
|
11
|
+
action_obj = client.get_action(action_instance[:name], action_instance[:namespace])
|
12
|
+
@actionExists = false
|
13
|
+
action = find_action(action_instance[:id], action_obj[:spec][:action])
|
14
|
+
component_name = action[:component]
|
15
|
+
component = Component.create_from_kube(client, component_instance, component_name)
|
16
|
+
Action.new(action[:name], action[:id], component)
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
@action = nil
|
22
|
+
@actionExists = false
|
23
|
+
def self.find_action(id, actionObject)
|
24
|
+
return @action if @actionExists
|
25
|
+
iterator = 0
|
26
|
+
while (!@actionExists && iterator < actionObject[:subtasks].length)
|
27
|
+
@action = actionObject[:subtasks][iterator]
|
28
|
+
if @action.id.to_s == id.to_s
|
29
|
+
@actionExists = true
|
30
|
+
return @action
|
31
|
+
elsif @action[:subtasks]
|
32
|
+
return self.find_action(id, @action)
|
33
|
+
end
|
34
|
+
iterator+=1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
attr_reader :name, :component, :id
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -4,6 +4,11 @@ module DTK::CrdParser
|
|
4
4
|
module ClassAndInstanceMixin
|
5
5
|
# Helper functions want to have available in all classes
|
6
6
|
|
7
|
+
def fail_if_nil(value, property_name)
|
8
|
+
fail Error::Usage, "Property #{property_name} should not be nil") unless value
|
9
|
+
value
|
10
|
+
end
|
11
|
+
|
7
12
|
def fail_if_not_type(object, type)
|
8
13
|
if object.kind_of?(type)
|
9
14
|
object
|
data/lib/crd_parser/component.rb
CHANGED
@@ -1,26 +1,22 @@
|
|
1
1
|
module DTK::CrdParser
|
2
2
|
class Component < BaseClass
|
3
3
|
require_relative('component/attribute')
|
4
|
-
|
5
|
-
attr_reader :name, :component_def, :attributes
|
4
|
+
require_relative('error')
|
6
5
|
|
7
6
|
MODE_DEFAULT = :component_instance
|
8
7
|
def initialize(name, component_def, attributes)
|
9
|
-
@name = name
|
10
|
-
@component_def = component_def # this wil point to the corresponding component def
|
11
|
-
@attributes = attributes # array that has an Attribute object for each attribute; these are name-value pairs
|
8
|
+
@name = fail_if_nil(name, 'name')
|
9
|
+
@component_def = fail_if_nil(component_def, 'component_def') # this wil point to the corresponding component def
|
10
|
+
@attributes = attributes || [] # array that has an Attribute object for each attribute; these are name-value pairs
|
12
11
|
end
|
13
12
|
|
14
13
|
def self.create_from_kube(client, component_instance, component_name)
|
15
|
-
component_name.gsub!('_', '-')
|
16
14
|
component_instance_obj = client.get_component(component_instance[:name], component_instance[:namespace])
|
17
15
|
component_def = ComponentDef.create_from_kube(client, component_instance_obj, component_name)
|
18
16
|
component_attributes = getComponentAttributes(component_name, component_instance_obj[:spec][:components])
|
19
17
|
attributes = []
|
20
|
-
|
21
|
-
|
22
|
-
attributes.push Attribute.create_from_kube(attribute_name, attribute_value)
|
23
|
-
end
|
18
|
+
(component_attributes || []).to_hash.each do |attribute_name, attribute_value|
|
19
|
+
attributes.push Attribute.create_from_kube(attribute_name, attribute_value)
|
24
20
|
end
|
25
21
|
Component.new(component_name, component_def, attributes)
|
26
22
|
end
|
@@ -28,6 +24,7 @@ module DTK::CrdParser
|
|
28
24
|
protected
|
29
25
|
|
30
26
|
def self.getComponentAttributes(fullComponentName, components)
|
27
|
+
fullComponentName.gsub!('_', '-')
|
31
28
|
component = components.each do |component|
|
32
29
|
componentObj = component[fullComponentName]
|
33
30
|
if(componentObj && componentObj.is_a?(Kubeclient::Resource))
|
@@ -37,6 +34,6 @@ module DTK::CrdParser
|
|
37
34
|
return nil
|
38
35
|
end
|
39
36
|
|
40
|
-
|
37
|
+
attr_reader :name, :component_def, :attributes
|
41
38
|
end
|
42
39
|
end
|
@@ -1,18 +1,19 @@
|
|
1
1
|
module DTK::CrdParser
|
2
2
|
class Component
|
3
3
|
class Attribute < BaseClass
|
4
|
-
|
5
|
-
attr_reader :name, :value
|
6
|
-
|
7
4
|
def initialize(name, value)
|
8
|
-
@name = name
|
9
|
-
@value = value
|
5
|
+
@name = fail_if_nil(name, 'Attribute.name')
|
6
|
+
@value = fail_if_nil(value, 'Attribute.value')
|
10
7
|
end
|
11
8
|
|
12
9
|
def self.create_from_kube(attribute_name, attribute_value)
|
13
10
|
Attribute.new(attribute_name, attribute_value)
|
14
11
|
end
|
15
12
|
|
13
|
+
protected
|
14
|
+
|
15
|
+
attr_reader :name, :value
|
16
|
+
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -1,21 +1,17 @@
|
|
1
1
|
module DTK::CrdParser
|
2
2
|
class ComponentDef < BaseClass
|
3
3
|
require_relative('component_def/attribute_type_info')
|
4
|
-
|
5
|
-
attr_reader :name, :namespace, :resource_version, :attribute_type_info, :bash_script, :entrypoint, :type
|
4
|
+
require_relative('error')
|
6
5
|
|
7
6
|
MODE_DEFAULT = :component_instance
|
8
7
|
|
9
|
-
def initialize(metadata,
|
10
|
-
@name = metadata[:name]
|
11
|
-
@namespace = metadata[:namespace]
|
12
|
-
@resource_version = metadata[:resourceVersion]
|
13
|
-
|
14
|
-
@bash_script = componentDefAction[:bash_script]
|
15
|
-
@entrypoint = componentDefAction[:entrypoint]
|
16
|
-
@type = componentDefAction[:type]
|
8
|
+
def initialize(metadata, componentDefActions, componentDefAttributes)
|
9
|
+
@name = fail_if_nil(metadata[:name], 'metadata[:name]')
|
10
|
+
@namespace = fail_if_nil(metadata[:namespace], 'metadata[:namespace]')
|
11
|
+
@resource_version = fail_if_nil(metadata[:resourceVersion], 'metadata[:resourceVersion]')
|
17
12
|
|
18
|
-
@
|
13
|
+
@executable_actions = componentDefActions || []
|
14
|
+
@attribute_type_info = componentDefAttributes || []
|
19
15
|
end
|
20
16
|
|
21
17
|
def self.create_from_kube(client, component_instance, component_def_name)
|
@@ -24,15 +20,17 @@ module DTK::CrdParser
|
|
24
20
|
|
25
21
|
componentDef = client.get_componentdef("#{destructured_component[:moduleName]}-#{destructured_component[:componentName]}", module_ref[:namespace])
|
26
22
|
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
componentMetadata = self.metadata(componentDef)
|
24
|
+
|
25
|
+
name = componentMetadata[:name]
|
26
|
+
namespace = componentMetadata[:namespace]
|
27
|
+
resourceVersion = componentMetadata[:resourceVersion]
|
30
28
|
|
31
|
-
componentDefSpec = componentDef[:spec]
|
32
|
-
componentDefAction = componentDefSpec[:actions][destructured_component[:action].to_sym]
|
29
|
+
componentDefSpec = componentDef[:spec] || {}
|
30
|
+
componentDefAction = componentDefSpec[:actions][destructured_component[:action].to_sym] if componentDefSpec[:actions]
|
33
31
|
componentDefAttributes = []
|
34
32
|
|
35
|
-
componentDefSpec[:attributes].each do |attribute|
|
33
|
+
(componentDefSpec[:attributes] || []).each do |attribute|
|
36
34
|
componentDefAttributes.push AttributeTypeInfo.resolveAttr(attribute)
|
37
35
|
end
|
38
36
|
|
@@ -80,5 +78,13 @@ module DTK::CrdParser
|
|
80
78
|
action: action
|
81
79
|
}
|
82
80
|
end
|
81
|
+
|
82
|
+
protected
|
83
|
+
|
84
|
+
attr_reader :name, :namespace, :resource_version, :attribute_type_info, :bash_script, :entrypoint, :type
|
85
|
+
|
86
|
+
def self.metadata(componentDef)
|
87
|
+
componentDef[:metadata]
|
88
|
+
end
|
83
89
|
end
|
84
90
|
end
|
@@ -1,12 +1,9 @@
|
|
1
1
|
module DTK::CrdParser
|
2
2
|
class ComponentDef
|
3
3
|
class AttributeTypeInfo < BaseClass
|
4
|
-
|
5
|
-
attr_reader :name, :type, :required, :dynamic
|
6
|
-
|
7
4
|
def initialize(params)
|
8
|
-
@name = params[:name]
|
9
|
-
@type = params[:type]
|
5
|
+
@name = fail_if_nil(params[:name], 'AttributeTypeInfo.name')
|
6
|
+
@type = fail_if_nil(params[:type], 'AttributeTypeInfo.type')
|
10
7
|
@required = params[:required] || false
|
11
8
|
@dynamic = params[:dynamic] || false
|
12
9
|
end
|
@@ -15,6 +12,9 @@ module DTK::CrdParser
|
|
15
12
|
AttributeTypeInfo.new(attribute)
|
16
13
|
end
|
17
14
|
|
15
|
+
protected
|
16
|
+
|
17
|
+
attr_reader :name
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtk_crd_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.40
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DTK
|
@@ -17,12 +17,15 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- lib/crd_parser.rb
|
20
|
+
- lib/crd_parser/action.rb
|
20
21
|
- lib/crd_parser/base_class.rb
|
21
22
|
- lib/crd_parser/base_class/helper_mixins.rb
|
22
23
|
- lib/crd_parser/component.rb
|
23
24
|
- lib/crd_parser/component/attribute.rb
|
24
25
|
- lib/crd_parser/component_def.rb
|
25
26
|
- lib/crd_parser/component_def/attribute_type_info.rb
|
27
|
+
- lib/crd_parser/error.rb
|
28
|
+
- lib/crd_parser/error/usage.rb
|
26
29
|
homepage: https://rubygems.org/gems/dtk_crd_parser
|
27
30
|
licenses:
|
28
31
|
- MIT
|
@@ -42,8 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
45
|
- !ruby/object:Gem::Version
|
43
46
|
version: '0'
|
44
47
|
requirements: []
|
45
|
-
|
46
|
-
rubygems_version: 2.4.5.4
|
48
|
+
rubygems_version: 3.0.3
|
47
49
|
signing_key:
|
48
50
|
specification_version: 4
|
49
51
|
summary: Parse kubernetes DTK crd to ruby in memory object!
|