Class: ForemanAnsibleDirector::LifecycleEnvironment

Inherits:
AnsibleDirectorModel show all
Includes:
Abstract::ContentSource
Defined in:
app/models/foreman_ansible_director/lifecycle_environment.rb

Instance Method Summary collapse

Methods inherited from AnsibleDirectorModel

#flatten_errors, table_name

Methods included from ForemanAnsibleDirector::Logging::LoggableModel

#log_creation, #log_destroy, #log_update, #loggable?

Methods included from RequestCtx::RequestContextHelper

#ctx

Instance Method Details

#ancestorsObject



113
114
115
116
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 113

def ancestors
  return [] unless parent
  [parent] + parent.ancestors
end

#assign_content_unit_version!(content_unit_version) ⇒ Object

TODO: This does not work. Add the content_unit_id to the join table for checking



75
76
77
78
79
80
81
82
83
84
85
86
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 75

def assign_content_unit_version!(content_unit_version)
  existing_version = lifecycle_environment_content_unit_versions
                     .find_by(content_unit_version_id: content_unit_version.id)

  if existing_version
    raise ArgumentError, "LifecycleEnvironment already has ContentUnit #{content_unit_version.versionable_id} " \
      "(existing version: #{existing_version.id}, attempted: #{content_unit_version.id})"
  end

  # Create the association
  lifecycle_environment_content_unit_versions.create!(content_unit_version: content_unit_version)
end

#assign_execution_environment!(execution_environment_id) ⇒ Object



63
64
65
66
67
68
69
70
71
72
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 63

def assign_execution_environment!(execution_environment_id)
  execution_env = ::ForemanAnsibleDirector::ExecutionEnvironment.find_by(id: execution_environment_id)

  unless execution_env
    errors.add(:execution_environment_id, 'not found')
    return false
  end

  update(execution_environment_id: execution_env.id)
end

#content_hashObject



92
93
94
95
96
97
98
99
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 92

def content_hash
  if using_snapshot_content?
    content_snapshot.content_hash
  else
    content_string = content_unit_versions.pluck(:versionable_id, :version)
    Digest::SHA2.new(256).hexdigest("#{content_string}:#{execution_environment&.id || 'default'}")[0, 8]
  end
end

#content_unit_versionsObject

scope :by_path, ->(path_id) { where(lifecycle_environment_path_id: path_id) } scope :ordered, -> { order(:position) } scope :roots, -> { where(parent_id: nil) }



43
44
45
46
47
48
49
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 43

def content_unit_versions
  if using_snapshot_content?
    snapshot_content_unit_versions
  else
    direct_content_unit_versions
  end
end

#cs_content_unit_versionsObject



51
52
53
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 51

def cs_content_unit_versions
  content_unit_versions
end

#cs_execution_environmentObject



59
60
61
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 59

def cs_execution_environment
  execution_environment
end

#cs_nameObject



55
56
57
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 55

def cs_name
  "#{lifecycle_environment_path.name} > #{name}"
end

#leaf?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 109

def leaf?
  child.nil?
end

#protected?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 101

def protected?
  protected
end

#root?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 105

def root?
  parent_id.nil?
end

#using_snapshot_content?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'app/models/foreman_ansible_director/lifecycle_environment.rb', line 88

def using_snapshot_content?
  !content_snapshot.nil?
end