Sha256: b19d6a363b732635db6f5f9d46a54c654d5b4e5892b2301b5c25bec717c0d7f3

Contents?: true

Size: 1.96 KB

Versions: 25

Compression:

Stored size: 1.96 KB

Contents

class Terraspace::Terraform::Api
  class Var
    extend Memoist
    include Http::Concern
    include Terraspace::Util::Logging

    # workspace: details from the api response
    def initialize(workspace, attrs={})
      @workspace, @attrs = workspace, attrs
      @workspace_id = @workspace['id']
    end

    def sync
      exist? ? update : create
    end

    def update
      return unless overwrite?
      updating_message
      variable_id = variable_id(@attrs['key'])
      payload = payload(variable_id)
      http.patch("workspaces/#{@workspace_id}/vars/#{variable_id}", payload)
    end

    def overwrite?
      if @attrs['sensitive']
        vars.overwrite_sensitive
      else
        vars.overwrite
      end
    end

    def vars
      Terraspace.config.cloud.vars
    end

    def variable_id(key)
      current_var_resp['id']
    end

    def create
      creating_message
      http.post("workspaces/#{@workspace_id}/vars", payload)
    end

    def payload(id=nil)
      data = {
        type: "vars",
        attributes: @attrs
      }
      data[:id] = id if id
      { data: data }
    end

    def updating_message
      return unless %w[all update].include?(vars.show_message)
      logger.info "Updating Terraform Cloud #{category} variable: #{@attrs['key']}"
    end

    def creating_message
      return unless %w[all create].include?(vars.show_message)
      logger.info "Creating Terraform Cloud #{category} variable: #{@attrs['key']}"
    end

    def exist?
      !!current_var_resp
    end

    def current_var_resp
      current_vars_resp['data'].find do |item|
        attributes = item['attributes']
        attributes['key'] == @attrs['key'] &&
        attributes['category'] == category
      end
    end

    def category
      @attrs['category'] || 'terraform' # default category when not set is terraform
    end

    @@current_vars_resp = nil
    def current_vars_resp
      @@current_vars_resp ||= http.get("workspaces/#{@workspace_id}/vars")
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
terraspace-0.5.12 lib/terraspace/terraform/api/var.rb
terraspace-0.5.11 lib/terraspace/terraform/api/var.rb
terraspace-0.5.10 lib/terraspace/terraform/api/var.rb
terraspace-0.5.9 lib/terraspace/terraform/api/var.rb
terraspace-0.5.8 lib/terraspace/terraform/api/var.rb
terraspace-0.5.7 lib/terraspace/terraform/api/var.rb
terraspace-0.5.6 lib/terraspace/terraform/api/var.rb
terraspace-0.5.5 lib/terraspace/terraform/api/var.rb
terraspace-0.5.4 lib/terraspace/terraform/api/var.rb
terraspace-0.5.3 lib/terraspace/terraform/api/var.rb
terraspace-0.5.2 lib/terraspace/terraform/api/var.rb
terraspace-0.5.1 lib/terraspace/terraform/api/var.rb
terraspace-0.5.0 lib/terraspace/terraform/api/var.rb
terraspace-0.4.4 lib/terraspace/terraform/api/var.rb
terraspace-0.4.3 lib/terraspace/terraform/api/var.rb
terraspace-0.4.2 lib/terraspace/terraform/api/var.rb
terraspace-0.4.1 lib/terraspace/terraform/api/var.rb
terraspace-0.4.0 lib/terraspace/terraform/api/var.rb
terraspace-0.3.6 lib/terraspace/terraform/api/var.rb
terraspace-0.3.5 lib/terraspace/terraform/api/var.rb