Method: Sfn::Callback::StackPolicy#save_stack_policy

Defined in:
lib/sfn/callback/stack_policy.rb

#save_stack_policy(p_stack) ⇒ NilClass

Save the cached policy for the given stack

Parameters:

  • p_stack (Miasma::Models::Orchestration::Stack)

Returns:

  • (NilClass)


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/sfn/callback/stack_policy.rb', line 76

def save_stack_policy(p_stack)
  valid_logical_ids = p_stack.resources.reload.all.map(&:logical_id)
  stack_policy = @policies.fetch(p_stack.id,
    @policies.fetch(p_stack.data[:logical_id]),
    @policies[p_stack.name]
  ).to_smash
  if(stack_policy)
    stack_policy[:statement].delete_if do |policy_item|
      policy_match = policy_item[:resource].to_s.match(
        %r{LogicalResourceId/(?<logical_id>.+)$}
      )
      if(policy_match)
        !valid_logical_ids.include?(policy_match["logical_id"])
      end
    end
  end
  result = p_stack.api.request(
    :path => '/',
    :method => :post,
    :form => Smash.new(
      'Action' => 'SetStackPolicy',
      'StackName' => p_stack.id,
      'StackPolicyBody' => MultiJson.dump(stack_policy)
    )
  )
end