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.

Parameters:

  • cluster (#to_h)

    the cluster object

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



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ood_core/cluster.rb', line 38

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)
end

Instance Attribute Details

#acls_configHash (readonly)

The acls configuration describing the permissions for this cluster

Returns:

  • (Hash)

    the acls configuration



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

Returns:

  • (Symbol)

    the cluster id



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

Returns:

  • (Hash)

    the job configuration



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

Returns:

  • (Hash)

    the login configuration



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

Returns:

  • (Hash)

    the metadata configuration



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

def 
  
end

Instance Method Details

#==(other) ⇒ Boolean

The comparison operator

Parameters:

  • other (#to_sym)

    object to compare against

Returns:

  • (Boolean)

    whether objects are equivalent



114
115
116
# File 'lib/ood_core/cluster.rb', line 114

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

#aclsArray<Acl::Adapter>

Build the ACL adapters from the ACL list configuration

Returns:



101
102
103
# File 'lib/ood_core/cluster.rb', line 101

def acls
  build_acls acls_config
end

#allow?Boolean

Whether this cluster is allowed to be used

Returns:

  • (Boolean)

    whether cluster is allowed



107
108
109
# File 'lib/ood_core/cluster.rb', line 107

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

#custom_allow?(feature) ⇒ Boolean

Whether the custom feature is allowed based on the ACLs

Returns:

  • (Boolean)

    is this custom feature allowed



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

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

Parameters:

  • feature (#to_sym, nil) (defaults to: nil)

    the feature or resource

Returns:

  • (Hash)

    configuration for custom feature or resource



87
88
89
# File 'lib/ood_core/cluster.rb', line 87

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

Returns:



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

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

#job_allow?Boolean

Whether the job feature is allowed based on the ACLs

Returns:

  • (Boolean)

    is the job feature allowed



78
79
80
81
82
# File 'lib/ood_core/cluster.rb', line 78

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

Returns:

  • (OpenStruct)

    the login



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

def 
  OpenStruct.new()
end

#login_allow?Boolean

Whether the login feature is allowed

Returns:

  • (Boolean)

    is login allowed



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

def 
  allow? && !.empty?
end

#metadataOpenStruct

Metadata that provides extra information about this cluster

Returns:

  • (OpenStruct)

    the metadata



54
55
56
# File 'lib/ood_core/cluster.rb', line 54

def 
  OpenStruct.new 
end

#to_hHash

Convert object to hash

Returns:

  • (Hash)

    the hash describing this object



126
127
128
129
130
131
132
133
134
135
# File 'lib/ood_core/cluster.rb', line 126

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

#to_symSymbol

Convert object to symbol

Returns:

  • (Symbol)

    the symbol describing this object



120
121
122
# File 'lib/ood_core/cluster.rb', line 120

def to_sym
  id
end