Sha256: 242acccbd9699ba597463fc1aa2bd0b98f31c8f76067fd987a4535ef0d5c4f40

Contents?: true

Size: 1.91 KB

Versions: 2

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module ForemanVault
  module Orchestration
    module VaultPolicy
      extend ActiveSupport::Concern

      MAGIC_COMMENT_PREFIX = '# NAME: '

      included do
        after_validation :queue_vault_push
        before_destroy :queue_vault_destroy
      end

      protected

      def queue_vault_push
        return if !managed? || errors.any?
        return unless orchestration_enabled?
        return unless vault_policy.valid?
        return unless vault_auth_method.valid?

        queue.create(name: _('Push %s data to Vault') % self, priority: 100,
                     action: [self, :set_vault])
      end

      def queue_vault_destroy
        return if !managed? || errors.any?
        return unless orchestration_enabled?
        return unless vault_auth_method.valid?

        queue.create(name: _('Clear %s Vault data') % self, priority: 60,
                     action: [self, :del_vault])
      end

      # rubocop:disable Metrics/AbcSize
      def set_vault
        logger.info "Pushing #{name} data to Vault"

        vault_policy.save if vault_policy.new?
        vault_auth_method.save
        true
      rescue StandardError => e
        Foreman::Logging.exception("Failed to push #{name} data to Vault.", e)
        failure format(_('Failed to push %{name} data to Vault: %{message}\n '), name: name, message: e.message), e
      end
      # rubocop:enable Metrics/AbcSize

      def del_vault
        logger.info "Clearing #{name} Vault data"

        vault_auth_method&.delete
      rescue StandardError => e
        Foreman::Logging.exception("Failed to clear #{name} Vault data", e)
        failure format(_("Failed to clear %{name} Vault data: %{message}\n "), name: name, message: e.message), e
      end

      def orchestration_enabled?
        return false unless Setting[:vault_orchestration_enabled]
        return false if vault_connection.nil?

        true
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
foreman_vault-1.2.0 app/models/concerns/foreman_vault/orchestration/vault_policy.rb
foreman_vault-1.1.0 app/models/concerns/foreman_vault/orchestration/vault_policy.rb