Class: OodCore::Cluster

Inherits:
Object
  • Object
show all
Defined in:
lib/ood_core/cluster.rb

Overview

An object that describes a cluster and its given features that third-party code can take advantage of.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cluster) ⇒ Cluster

Returns a new instance of Cluster

Options Hash (cluster):

  • :id (#to_sym)

    The cluster id

  • :metadata (#to_h) — default: {}

    The cluster's metadata

  • :login (#to_h) — default: {}

    The cluster's SSH host

  • :job (#to_h) — default: {}

    The job adapter for this cluster

  • :custom (#to_h) — default: {}

    Any custom resources for this cluster

  • :acls (Array<#to_h>) — default: []

    List of ACLs to validate against

  • :batch_connect (#to_h) — default: {}

    Configuration for batch connect templates


42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ood_core/cluster.rb', line 42

def initialize(cluster)
  c = cluster.to_h.symbolize_keys

  # Required options
  @id = c.fetch(:id) { raise ArgumentError, "No id specified. Missing argument: id" }.to_sym

  # General options
   = c.fetch(:metadata, {}).to_h.symbolize_keys
  @login_config    = c.fetch(:login, {})   .to_h.symbolize_keys
  @job_config      = c.fetch(:job, {})     .to_h.symbolize_keys
  @custom_config   = c.fetch(:custom, {})  .to_h.symbolize_keys
  @acls_config     = c.fetch(:acls, [])    .map(&:to_h)
  @batch_connect_config = c.fetch(:batch_connect, {}).to_h.symbolize_keys
end

Instance Attribute Details

#acls_configHash (readonly)

The acls configuration describing the permissions for this cluster


29
30
31
# File 'lib/ood_core/cluster.rb', line 29

def acls_config
  @acls_config
end

#idSymbol (readonly)

The unique identifier for a given cluster


13
14
15
# File 'lib/ood_core/cluster.rb', line 13

def id
  @id
end

#job_configHash (readonly)

The job adapter configuration used for this cluster


25
26
27
# File 'lib/ood_core/cluster.rb', line 25

def job_config
  @job_config
end

#login_configHash (readonly)

The login configuration used for this cluster


21
22
23
# File 'lib/ood_core/cluster.rb', line 21

def 
  @login_config
end

#metadata_configHash (readonly)

Metadata configuration providing descriptive information about cluster


17
18
19
# File 'lib/ood_core/cluster.rb', line 17

def 
  
end

Instance Method Details

#==(other) ⇒ Boolean

The comparison operator


138
139
140
# File 'lib/ood_core/cluster.rb', line 138

def ==(other)
  id == other.to_sym
end

#aclsArray<Acl::Adapter>

Build the ACL adapters from the ACL list configuration


125
126
127
# File 'lib/ood_core/cluster.rb', line 125

def acls
  build_acls acls_config
end

#allow?Boolean

Whether this cluster is allowed to be used


131
132
133
# File 'lib/ood_core/cluster.rb', line 131

def allow?
  acls.all?(&:allow?)
end

#batch_connect_config(template = nil) ⇒ Hash

The batch connect template configuration used for this cluster


92
93
94
95
96
97
98
# File 'lib/ood_core/cluster.rb', line 92

def batch_connect_config(template = nil)
  if template
    @batch_connect_config.fetch(template.to_sym, {}).to_h.symbolize_keys.merge(template: template.to_sym)
  else
    @batch_connect_config
  end
end

#batch_connect_template(context = {}) ⇒ BatchConnect::Template

Build a batch connect template from the respective configuration


103
104
105
106
# File 'lib/ood_core/cluster.rb', line 103

def batch_connect_template(context = {})
  context = context.to_h.symbolize_keys
  BatchConnect::Factory.build batch_connect_config(context[:template] || :basic).merge(context)
end

#custom_allow?(feature) ⇒ Boolean

Whether the custom feature is allowed based on the ACLs


117
118
119
120
121
# File 'lib/ood_core/cluster.rb', line 117

def custom_allow?(feature)
  allow? &&
    !custom_config(feature).empty? &&
    build_acls(custom_config(feature).fetch(:acls, []).map(&:to_h)).all?(&:allow?)
end

#custom_config(feature = nil) ⇒ Hash

The configuration for any custom features or resources for this cluster


111
112
113
# File 'lib/ood_core/cluster.rb', line 111

def custom_config(feature = nil)
  feature ? @custom_config.fetch(feature.to_sym, {}).to_h.symbolize_keys : @custom_config
end

#job_adapterJob::Adapter

Build a job adapter from the job configuration


77
78
79
# File 'lib/ood_core/cluster.rb', line 77

def job_adapter
  Job::Factory.build(job_config)
end

#job_allow?Boolean

Whether the job feature is allowed based on the ACLs


83
84
85
86
87
# File 'lib/ood_core/cluster.rb', line 83

def job_allow?
  allow? &&
    !job_config.empty? &&
    build_acls(job_config.fetch(:acls, []).map(&:to_h)).all?(&:allow?)
end

#loginOpenStruct

The login used for this cluster


65
66
67
# File 'lib/ood_core/cluster.rb', line 65

def 
  OpenStruct.new()
end

#login_allow?Boolean

Whether the login feature is allowed


71
72
73
# File 'lib/ood_core/cluster.rb', line 71

def 
  allow? && !.empty?
end

#metadataOpenStruct

Metadata that provides extra information about this cluster


59
60
61
# File 'lib/ood_core/cluster.rb', line 59

def 
  OpenStruct.new 
end

#to_hHash

Convert object to hash


150
151
152
153
154
155
156
157
158
159
160
# File 'lib/ood_core/cluster.rb', line 150

def to_h
  {
    id: id,
    metadata: ,
    login: ,
    job: job_config,
    custom: custom_config,
    acls: acls_config,
    batch_connect:  batch_connect_config
  }
end

#to_symSymbol

Convert object to symbol


144
145
146
# File 'lib/ood_core/cluster.rb', line 144

def to_sym
  id
end