dtk_crd_parser 0.0.140 → 0.0.141

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
  SHA1:
3
- metadata.gz: 8cbbd4b9bff874b95b147d5779af5b01e906997f
4
- data.tar.gz: 921a589983fdd99fb0a8b8e9416bc37c0aa5bf6f
3
+ metadata.gz: 99b49a025dd321de393fc028ff69692f492fed6e
4
+ data.tar.gz: ebdfbc850c67b77296bd9d348a11cda658091f64
5
5
  SHA512:
6
- metadata.gz: c33143b3265f82f20f60028cc087402ce4750e7ab67c0b3d7b15073ac9c75f7547c2e9a58cf6acf8de457fae2c9efc838d3afc0a73a47c9eab50837cb4658013
7
- data.tar.gz: d1cbe00cbae5978835f62447f29383506578fef768940a945238241816783df9989318fcd60519da0da213ea7f7057b72176392afeb98ff13c894781b718d2ed
6
+ metadata.gz: 484ed3104e6d45c4f0cc94378fa6cb4bda9b3636b2682f0b354129120548d206b08cb3d4843d49d772ae65466aac066644afcc799a184a3e6ae984884a405430
7
+ data.tar.gz: 1cb529cca089d09bd2b3b5fb56c2702e4064c1719baad486ee15ef704edd0f52af2b2831d369b624f1aafee3046bd93e0155ec359a5379f934dc5768b226c130
@@ -16,14 +16,16 @@ module DTK::CrdParser
16
16
  component_obj = Component.create_from_kube(client, component_instance, component_name)
17
17
  actions = component_obj.component_def.executable_actions
18
18
  executable_actions = Hash.new
19
- actions.to_hash.each do |name, action|
20
- params = {
21
- name: name.to_s,
22
- entrypoint: action[:entrypoint] || "",
23
- type: action[:type] || "",
24
- bash_script: action[:bash_script] || ""
25
- }
26
- executable_actions[name.to_sym] = ExecutableAction.new(params)
19
+ if actions
20
+ actions.to_hash.each do |name, action|
21
+ params = {
22
+ name: name.to_s,
23
+ entrypoint: action[:entrypoint] || "",
24
+ type: action[:type] || "",
25
+ bash_script: action[:bash_script] || ""
26
+ }
27
+ executable_actions[name.to_sym] = ExecutableAction.new(params)
28
+ end
27
29
  end
28
30
  executable_actions
29
31
  end
@@ -3,6 +3,29 @@ module DTK::CrdParser
3
3
  module Helper
4
4
  module ClassAndInstanceMixin
5
5
  # Helper functions want to have available in all classes
6
+ def self.isOnSpecificNode(actionComponent)
7
+ actionComponent.include? "/"
8
+ end
9
+
10
+ def self.destructureActionComponent(actionComponent)
11
+ # regex to match component: module::name[attrName].action
12
+ regex = /(.*)::(.*)\[(.*)\].?(.*)/
13
+ # if component on node group node, get full name first
14
+ # i.e ec2::node[ng-1]/(node-utility::ssh-access[ubuntu])
15
+ nodeName, actionComponent = actionComponent.match(/(.*)\/(.*)/).captures if isOnSpecificNode(actionComponent)
16
+ compModule, compName, attributeName, action = actionComponent.match(regex).captures if actionComponent.match(regex)
17
+ action = (action && !action.empty?) ? action.to_sym : nil
18
+
19
+ if(compModule.nil? || compName.nil? || attributeName.nil?)
20
+ raise "Could not resolve component module, name or attribute name for component: #{actionComponent}"
21
+ end
22
+ {
23
+ moduleName: compModule,
24
+ componentName: compName,
25
+ attributeName: attributeName,
26
+ action: action
27
+ }
28
+ end
6
29
 
7
30
  def fail_if_nil(value, property_name)
8
31
  fail Error::Usage, "Property #{property_name} should not be nil" if value.nil?
@@ -26,6 +49,36 @@ module DTK::CrdParser
26
49
  end
27
50
  fail "#{the_method} is not defined in the concrete class #{klass}"
28
51
  end
52
+
53
+ def decrypt_if_encrypted(data_to_decrypt, encrypted)
54
+ return nil if data_to_decrypt.nil?
55
+ return data_to_decrypt unless encrypted
56
+ #get secret to get the key
57
+ secret = secret()
58
+ decipher = OpenSSL::Cipher::AES256.new :CBC
59
+ decipher.decrypt
60
+ begin
61
+ decoded = Base64.decode64(data_to_decrypt)
62
+ # iv is 16byte string prepended to the encrypted value
63
+ iv, encrypted = [decoded[0,16], decoded[16..-1]]
64
+ decipher.key = secret[:key]
65
+ decipher.iv = iv
66
+ plain_text = decipher.update(encrypted) + decipher.final
67
+ plain_text
68
+ rescue => exception
69
+ Logger.new('/proc/1/fd/1').error exception.message
70
+ end
71
+ end
72
+
73
+ def secret
74
+ encrypt_key = ENV["ENCRYPTION_KEY"]
75
+ iv = ENV["ENCRYPTION_IV"]
76
+ {
77
+ key: encrypt_key,
78
+ iv: iv
79
+ }
80
+ end
81
+
29
82
  end
30
83
  end
31
84
  end
@@ -1,5 +1,3 @@
1
- require 'logger'
2
-
3
1
  module DTK::CrdParser
4
2
  class Component < BaseClass
5
3
  require_relative('component/attribute')
@@ -21,12 +19,15 @@ module DTK::CrdParser
21
19
  component_instance_obj = client.get_component(component_instance[:name], component_instance[:namespace])
22
20
  component_def = ComponentDef.create_from_kube(client, component_instance_obj, component_name)
23
21
  component_attributes = getComponentAttributes(component_name, component_instance_obj[:spec][:components])
24
- Logger.new('/proc/1/fd/1').info("DEBUGGING: #{component_name}, #{component_attributes}")
22
+ attribute_name_value = BaseClass::Helper::ClassAndInstanceMixin.destructureActionComponent(component_name)[:attributeName]
25
23
  attributes = []
24
+ attributes.push(Attribute.create_from_kube("name", attribute_name_value, {}))
26
25
  if component_attributes
27
- Logger.new('/proc/1/fd/1').info("DEBUGGING To hash: #{component_attributes.to_hash}")
28
- component_attributes.to_hash.each do |attribute_name, attribute_value|
29
- attributes.push Attribute.create_from_kube(attribute_name, attribute_value)
26
+ (component_attributes.to_hash || []).each do |attribute_name, attribute_value|
27
+ attribute_type_info = (component_def.attribute_type_info
28
+ .select {|attribute| attribute.name == attribute_name.to_s} || []).first
29
+ encrypted = attribute_type_info.encrypted if attribute_type_info
30
+ attributes.push Attribute.create_from_kube(attribute_name, attribute_value, {encrypted: encrypted || false})
30
31
  end
31
32
  end
32
33
  Component.new(component_name, component_def, attributes)
@@ -36,8 +37,9 @@ module DTK::CrdParser
36
37
  protected
37
38
 
38
39
  def self.getComponentAttributes(fullComponentName, components)
39
- component = components.each do |component|
40
- componentObj = component[fullComponentName]
40
+ component = (components || []).each do |component|
41
+ name = (component.to_h).keys.first.to_s.gsub!('_', '-')
42
+ componentObj = component[(component.to_h).keys.first.to_s] if (fullComponentName == name)
41
43
  if(componentObj && componentObj.is_a?(Kubeclient::Resource))
42
44
  return componentObj[:attributes]
43
45
  end
@@ -1,19 +1,16 @@
1
- require 'logger'
2
1
  module DTK::CrdParser
3
2
  class Component
4
3
  class Attribute < BaseClass
5
4
 
6
5
  attr_reader :name, :value
7
6
 
8
- def initialize(name, value)
9
- Logger.new('/proc/1/fd/1').info("DEBUGGING in new: #{name}, #{value}")
7
+ def initialize(name, value, params = {})
10
8
  @name = fail_if_nil(name, 'Attribute.name')
11
- @value = fail_if_nil(value, 'Attribute.value')
9
+ @value = fail_if_nil(decrypt_if_encrypted(value, params[:encrypted]), 'Attribute.value')
12
10
  end
13
11
 
14
- def self.create_from_kube(attribute_name, attribute_value)
15
- Logger.new('/proc/1/fd/1').info("DEBUGGING above new: #{attribute_name}, #{attribute_value}")
16
- Attribute.new(attribute_name, attribute_value)
12
+ def self.create_from_kube(attribute_name, attribute_value, params)
13
+ Attribute.new(attribute_name, attribute_value, params)
17
14
  end
18
15
 
19
16
  end
@@ -16,7 +16,7 @@ module DTK::CrdParser
16
16
  end
17
17
 
18
18
  def self.create_from_kube(client, component_instance, component_def_name)
19
- destructured_component = destructureActionComponent(component_def_name)
19
+ destructured_component = BaseClass::Helper::ClassAndInstanceMixin.destructureActionComponent(component_def_name)
20
20
  module_ref = resolveModuleReference(component_instance[:references][:module_refs], component_def_name, destructured_component[:moduleName])
21
21
 
22
22
  componentDef = client.get_componentdef("#{destructured_component[:moduleName]}-#{destructured_component[:componentName]}", module_ref[:namespace])
@@ -34,8 +34,8 @@ module DTK::CrdParser
34
34
  componentDefAction = componentDefSpec[:actions]
35
35
  end
36
36
  componentDefAttributes = []
37
-
38
- (componentDefSpec[:attributes] || []).each do |attribute|
37
+
38
+ (componentDefSpec[:attributes] || []).each do |attribute|
39
39
  componentDefAttributes.push AttributeTypeInfo.resolveAttr(attribute)
40
40
  end
41
41
 
@@ -64,25 +64,6 @@ module DTK::CrdParser
64
64
  actionComponent.include? "/"
65
65
  end
66
66
 
67
- def self.destructureActionComponent(actionComponent)
68
- # regex to match component: module::name[attrName].action
69
- regex = /(.*)::(.*)\[(.*)\].?(.*)/
70
- # if component on node group node, get full name first
71
- # i.e ec2::node[ng-1]/(node-utility::ssh-access[ubuntu])
72
- nodeName, actionComponent = actionComponent.match(/(.*)\/(.*)/).captures if isOnSpecificNode(actionComponent)
73
- compModule, compName, attributeName, action = actionComponent.match(regex).captures if actionComponent.match(regex)
74
- action = (action && !action.empty?) ? action.to_sym : nil
75
-
76
- if(compModule.nil? || compName.nil? || attributeName.nil?)
77
- raise "Could not resolve component module, name or attribute name for component: #{actionComponent}"
78
- end
79
- {
80
- moduleName: compModule,
81
- componentName: compName,
82
- attributeName: attributeName,
83
- action: action
84
- }
85
- end
86
67
  protected
87
68
  def self.metadata(componentDef)
88
69
  componentDef[:metadata]
@@ -2,13 +2,14 @@ module DTK::CrdParser
2
2
  class ComponentDef
3
3
  class AttributeTypeInfo < BaseClass
4
4
 
5
- attr_reader :name, :type, :required, :dynamic
5
+ attr_reader :name, :type, :required, :dynamic, :encrypted
6
6
 
7
7
  def initialize(params)
8
8
  @name = params[:name]
9
9
  @type = params[:type]
10
- @required = params[:required] || false
11
- @dynamic = params[:dynamic] || false
10
+ @required = params[:required] || false
11
+ @dynamic = params[:dynamic] || false
12
+ @encrypted = params[:encrypted] || false
12
13
  end
13
14
 
14
15
  def self.resolveAttr(attribute)
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.140
4
+ version: 0.0.141
5
5
  platform: ruby
6
6
  authors:
7
7
  - DTK