Sha256: 19b94fcb8f7ead2e72b780fe67f53e2f885f3bfb231f9b6a1ebbad56cb6e79bf

Contents?: true

Size: 1.96 KB

Versions: 71

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.tfc.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

71 entries across 71 versions & 1 rubygems

Version Path
terraspace-2.2.17 lib/terraspace/terraform/api/var.rb
terraspace-2.2.16 lib/terraspace/terraform/api/var.rb
terraspace-2.2.15 lib/terraspace/terraform/api/var.rb
terraspace-2.2.14 lib/terraspace/terraform/api/var.rb
terraspace-2.2.13 lib/terraspace/terraform/api/var.rb
terraspace-2.2.12 lib/terraspace/terraform/api/var.rb
terraspace-2.2.11 lib/terraspace/terraform/api/var.rb
terraspace-2.2.10 lib/terraspace/terraform/api/var.rb
terraspace-2.2.9 lib/terraspace/terraform/api/var.rb
terraspace-2.2.8 lib/terraspace/terraform/api/var.rb
terraspace-2.2.7 lib/terraspace/terraform/api/var.rb
terraspace-2.2.6 lib/terraspace/terraform/api/var.rb
terraspace-2.2.5 lib/terraspace/terraform/api/var.rb
terraspace-2.2.4 lib/terraspace/terraform/api/var.rb
terraspace-2.2.3 lib/terraspace/terraform/api/var.rb
terraspace-2.2.2 lib/terraspace/terraform/api/var.rb
terraspace-2.2.1 lib/terraspace/terraform/api/var.rb
terraspace-2.2.0 lib/terraspace/terraform/api/var.rb
terraspace-2.1.7 lib/terraspace/terraform/api/var.rb
terraspace-2.1.6 lib/terraspace/terraform/api/var.rb