Sha256: 3178ecd6cd0c6eacdcd1f72f2e8f5c57df0735133ab5f6338621d142f1cc82e8

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

module Caco::Postgres
  class ConfSet < Trailblazer::Operation
    ProcessSingleValue = Class.new(Trailblazer::Activity::Signal)
    ProcessMultipleValue = Class.new(Trailblazer::Activity::Signal)

    step Caco::Postgres::BuildAugeas()

    step :define_what_process,
      Output(ProcessSingleValue, :single_value) => Id(:process_single_value),
      Output(ProcessMultipleValue, :multiple_values) => Id(:process_multiple_values),
      Output(Trailblazer::Activity::Left, :failure) => End(:failure)
    step :process_single_value, magnetic_to: nil
    step :process_multiple_values, magnetic_to: nil

    def define_what_process(ctx, name: nil, names: nil, value: nil, values: nil, **)
      if name && value
        return ProcessSingleValue
      elsif values and values.is_a?(Hash)
        return ProcessMultipleValue
      else
        return false
      end
    end

    def process_single_value(ctx, name:, value:, aug:, **)
      ctx[:existing_value] = aug.get("/files/postgresql.conf/#{name}")
      ctx[:created] = !ctx[:existing_value]
      if ctx[:existing_value] == value
        return true
      else
        ctx[:changed] = true
        ctx[:value] = aug.set("/files/postgresql.conf/#{name}", value)
        aug.save!
      end
      true
    end

    def process_multiple_values(ctx, values:, aug:, **)
      ctx[:values] = {}
      values.each_pair do |name, value|
        ctx[:existing_value] = aug.get("/files/postgresql.conf/#{name}")
        ctx[:created] = true unless ctx[:existing_value]
        if ctx[:existing_value] == value
          next
        else
          ctx[:changed] = true
          ctx[:values][name.to_s] = aug.set("/files/postgresql.conf/#{name}", value)
        end
      end
      aug.save! if ctx[:changed]
      true
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
caco-0.1.0 lib/caco/postgres/conf_set.rb