Class: ForemanAnsibleDirector::AssignmentService

Inherits:
AnsibleDirectorService show all
Defined in:
app/services/foreman_ansible_director/assignment_service.rb

Class Method Summary collapse

Methods included from RequestCtx::RequestContextHelper

#ctx

Class Method Details

.assignments_for(target:, resolve: false) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 54

def assignments_for(target:, resolve: false)
  content_source, = content_source_for(target)
  resolved_assignments, hierarchy = recurse_content_assignments(target)

  return resolved_assignments, nil, hierarchy unless resolve && content_source

  resolved = resolve_content_units(content_source, resolved_assignments)

  [resolved_assignments, resolved, hierarchy]
end

.content_source_for(target, hierarchy = []) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 65

def content_source_for(target, hierarchy = [])
  return [nil, hierarchy] if target.nil?

  hierarchy << target

  if target.cr_content_source
    return [target.cr_content_source,
            hierarchy]
  elsif target.cr_content_source_state == 'none'
    return [nil, hierarchy]
  end

  content_source_for target.cr_immediate_predecessor, hierarchy
end

.create_assignment(target:, assignment:) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 12

def create_assignment(target:,
                      assignment:)
  ActiveRecord::Base.transaction do
    ::ForemanAnsibleDirector::AnsibleContentAssignment.create!(
      consumable: target,
      assignable_type: assignment[:assignable_type],
      assignable_namespace: assignment[:assignable_namespace],
      assignable_name: assignment[:assignable_name],
      assignable_role_name: if assignment[:assignable_type] == 'ForemanAnsibleDirector::AnsibleCollectionRole'
                              assignment[:assignable_role_name]
                            end
    )
  end
end

.create_bulk_assignments(target:, assignments:) ⇒ Object



27
28
29
30
31
32
33
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 27

def create_bulk_assignments(target:, assignments:)
  ActiveRecord::Base.transaction do
    assignments.each do |assignment|
      create_assignment(target: target, assignment: assignment)
    end
  end
end

.destroy_assignment(assignment) ⇒ Object



6
7
8
9
10
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 6

def destroy_assignment(assignment)
  ActiveRecord::Base.transaction do
    assignment.destroy
  end
end

.find_target(target_type:, target_id:) ⇒ Object



48
49
50
51
52
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 48

def find_target(target_type:, target_id:)
  # TODO: Null check target
  finder = finder(type: target_type)
  finder.find_by(id: target_id)
end

.finder(type:) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/services/foreman_ansible_director/assignment_service.rb', line 35

def finder(type:)
  case type

  when 'host'
    Host
  when 'hostgroup'
    Hostgroup
  else
    # TODO: Actual error message
    raise "Invalid type: #{type}"
  end
end