terraform-enterprise-client 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +11 -53
  3. data/lib/terraform-enterprise-client.rb +1 -39
  4. data/lib/terraform-enterprise.rb +1 -0
  5. data/lib/terraform_enterprise.rb +2 -0
  6. data/lib/terraform_enterprise/api/client.rb +62 -0
  7. data/lib/terraform_enterprise/api/request.rb +97 -0
  8. data/lib/terraform_enterprise/api/resource.rb +48 -0
  9. data/lib/terraform_enterprise/api/resource_request.rb +12 -0
  10. data/lib/terraform_enterprise/api/resource_requests/configuration_versions.rb +28 -0
  11. data/lib/{terraform-enterprise/resource_requests/oauth-tokens.rb → terraform_enterprise/api/resource_requests/oauth_tokens.rb} +5 -4
  12. data/lib/{terraform-enterprise → terraform_enterprise/api}/resource_requests/organizations.rb +8 -7
  13. data/lib/terraform_enterprise/api/resource_requests/policies.rb +46 -0
  14. data/lib/terraform_enterprise/api/resource_requests/policy_checks.rb +18 -0
  15. data/lib/terraform_enterprise/api/resource_requests/runs.rb +53 -0
  16. data/lib/{terraform-enterprise → terraform_enterprise/api}/resource_requests/teams.rb +8 -8
  17. data/lib/terraform_enterprise/api/resource_requests/variables.rb +48 -0
  18. data/lib/terraform_enterprise/api/resource_requests/workspaces.rb +52 -0
  19. data/lib/terraform_enterprise/api/response.rb +39 -0
  20. data/lib/terraform_enterprise/api/version.rb +5 -0
  21. data/lib/terraform_enterprise_client.rb +1 -0
  22. metadata +24 -88
  23. data/bin/tfe +0 -4
  24. data/lib/terraform-enterprise-command-line.rb +0 -29
  25. data/lib/terraform-enterprise/client/request.rb +0 -82
  26. data/lib/terraform-enterprise/client/resource.rb +0 -19
  27. data/lib/terraform-enterprise/client/resource_request.rb +0 -10
  28. data/lib/terraform-enterprise/client/response.rb +0 -37
  29. data/lib/terraform-enterprise/commands/command.rb +0 -46
  30. data/lib/terraform-enterprise/commands/formatter.rb +0 -93
  31. data/lib/terraform-enterprise/commands/oauth_tokens_command.rb +0 -16
  32. data/lib/terraform-enterprise/commands/organizations_command.rb +0 -30
  33. data/lib/terraform-enterprise/commands/strings.rb +0 -79
  34. data/lib/terraform-enterprise/commands/teams_command.rb +0 -33
  35. data/lib/terraform-enterprise/commands/variables_command.rb +0 -61
  36. data/lib/terraform-enterprise/commands/workspaces_command.rb +0 -87
  37. data/lib/terraform-enterprise/resource_requests/variables.rb +0 -48
  38. data/lib/terraform-enterprise/resource_requests/workspaces.rb +0 -45
  39. data/lib/terraform-enterprise/version.rb +0 -3
data/bin/tfe DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- mode: ruby -*-
3
-
4
- require File.expand_path('../../lib/terraform-enterprise-command-line', __FILE__)
@@ -1,29 +0,0 @@
1
- require 'thor'
2
-
3
- require 'terraform-enterprise/version'
4
- require 'terraform-enterprise/commands/organizations_command'
5
- require 'terraform-enterprise/commands/workspaces_command'
6
- require 'terraform-enterprise/commands/oauth_tokens_command'
7
- require 'terraform-enterprise/commands/teams_command'
8
- require 'terraform-enterprise/commands/variables_command'
9
-
10
- module TerraformEnterprise
11
- class CommandLine < Thor
12
- desc 'organizations <subcommand>', 'Manage organizations'
13
- subcommand 'organizations', TerraformEnterprise::Commands::OrganizationsCommand
14
-
15
- desc 'workspaces <subcommand>', 'Manage workspaces'
16
- subcommand 'workspaces', TerraformEnterprise::Commands::WorkspacesCommand
17
-
18
- desc 'oauth_tokens <subcommand>', 'Manage OAuth tokens'
19
- subcommand 'oauth_tokens', TerraformEnterprise::Commands::OAuthTokensCommand
20
-
21
- desc 'teams <subcommand>', 'Manage teams'
22
- subcommand 'teams', TerraformEnterprise::Commands::TeamsCommand
23
-
24
- desc 'variables <subcommand>', 'Manage variables'
25
- subcommand 'variables', TerraformEnterprise::Commands::VariablesCommand
26
- end
27
- end
28
-
29
- TerraformEnterprise::CommandLine.start(ARGV)
@@ -1,82 +0,0 @@
1
- require 'terraform-enterprise/client/response'
2
-
3
- module TerraformEnterprise
4
- module API
5
- class Request
6
- attr_accessor :base
7
-
8
- def initialize(api_key:, host: 'https://app.terraform.io/api/v2', debug: false)
9
- @base = host
10
- @api_key = api_key
11
- @debug = debug
12
- @headers = {
13
- 'Authorization' => "Bearer #{@api_key}",
14
- 'Content-Type' => 'application/vnd.api+json'
15
- }
16
- end
17
-
18
- def get(*path)
19
- data = path.pop if path.last.is_a?(Hash)
20
- request(:get, path, data)
21
- end
22
-
23
- def delete(*path)
24
- data = path.pop if path.last.is_a?(Hash)
25
- request(:delete, path,data)
26
- end
27
-
28
- def post(*path)
29
- data = path.pop if path.last.is_a?(Hash)
30
- request(:post, path, data)
31
- end
32
-
33
- def put(*path)
34
- data = path.pop if path.last.is_a?(Hash)
35
- request(:put,data,data)
36
- end
37
-
38
- def patch(*path)
39
- data = path.pop if path.last.is_a?(Hash)
40
- request(:patch,path,data)
41
- end
42
-
43
- def request(method, path, data={}, headers={})
44
- request = {
45
- method: method,
46
- url: uri(path),
47
- headers: @headers.merge(headers || {})
48
- }
49
- if data
50
- if method==:get || method==:delete
51
- request[:headers][:params] = data
52
- else
53
- request[:payload] = data.is_a?(String) ? data : data.to_json
54
- end
55
- end
56
-
57
- response = begin
58
- RestClient::Request.execute(request)
59
- rescue RestClient::ExceptionWithResponse => ex
60
- ex.response
61
- end
62
-
63
- if @debug
64
- puts "[DEBUG] [REQUEST:METHOD] #{request[:method].to_s.upcase} #{request[:url]}"
65
- puts "[DEBUG] [REQUEST:HEADERS] #{request[:headers]}"
66
- puts "[DEBUG] [REQUEST:PAYLOAD] #{data}"
67
- puts "[DEBUG] [RESPONSE:CODE] #{response.code}"
68
- puts "[DEBUG] [RESPONSE:BODY] #{response.body}"
69
- end
70
-
71
- TerraformEnterprise::API::Response.new(response)
72
- end
73
-
74
- private
75
-
76
- def uri(path=[])
77
- return path if path.is_a?(String) && path.start_with?("http")
78
- "#{@base}/#{path.map{|p| p.to_s}.join('/')}"
79
- end
80
- end
81
- end
82
- end
@@ -1,19 +0,0 @@
1
- module TerraformEnterprise
2
- module API
3
- class Resource
4
- attr_accessor :type, :attributes, :id, :relationships, :links, :errors, :success
5
- def initialize(data)
6
- @id = data['id']
7
- @type = data['type']
8
- @attributes = data['attributes'] || {}
9
- @relationships = data['relationships'] || {}
10
- @links = data['links'] || []
11
- @errors = data['errors'] || []
12
- end
13
-
14
- def has_errors?
15
- !@errors.empty?
16
- end
17
- end
18
- end
19
- end
@@ -1,10 +0,0 @@
1
- module TerraformEnterprise
2
- module API
3
- class ResourceRequest
4
- def initialize(request, params={})
5
- @request = request
6
- @params = params
7
- end
8
- end
9
- end
10
- end
@@ -1,37 +0,0 @@
1
- require 'terraform-enterprise/client/resource'
2
-
3
- module TerraformEnterprise
4
- module API
5
- class Response
6
- attr_reader :code, :body, :data, :resource, :resources, :errors
7
- def initialize(rest_client_response)
8
- @code = rest_client_response.code
9
- @body = parse(rest_client_response.body)
10
- @data = (@body.is_a?(Hash) && @body['data']) ? @body['data'] : @body
11
- if @data.is_a?(Hash)
12
- @resource = TerraformEnterprise::API::Resource.new(@data)
13
- end
14
- if @data.is_a?(Array) && @data.all?{|a| a.is_a?(Hash)}
15
- @resources = @data.map do |item|
16
- TerraformEnterprise::API::Resource.new(item)
17
- end
18
- end
19
- if has_errors?
20
- @errors = @body['errors']
21
- end
22
- end
23
-
24
- def has_errors?
25
- @body.is_a?(Hash) && @body['errors'] && @body['errors'].is_a?(Array)
26
- end
27
-
28
- private
29
-
30
- def parse(str)
31
- JSON.parse(str)
32
- rescue JSON::ParserError
33
- str
34
- end
35
- end
36
- end
37
- end
@@ -1,46 +0,0 @@
1
- require 'json'
2
-
3
- require 'terraform-enterprise-client'
4
- require 'terraform-enterprise/commands/formatter'
5
- require 'terraform-enterprise/commands/strings'
6
-
7
- module TerraformEnterprise
8
- module Commands
9
- class Command < Thor
10
- class_option :host, type: :string, desc: 'Set host address for private Terraform Enterprise'
11
- class_option :token, type: :string, desc: 'Set the auth token, defaults to TERRAFORM_ENTERPRISE_TOKEN environment variable'
12
- class_option :color, type: :boolean, default: true, desc: 'If disabled the ANSI color codes will not be used'
13
- class_option :except, type: :array, desc: 'List of fields that should not be displayed'
14
- class_option :only, type: :array, desc: 'List of fields that should be displayed'
15
- class_option :all, type: :boolean, default: false, desc: "Return all fields, not just summary"
16
- class_option :value, type: :boolean, default: false, desc: 'Only return the value; i.e. do not show keys'
17
- class_option :debug, type: :boolean, default: false, desc: 'Show debug logs'
18
-
19
- no_commands do
20
- def render(obj, default_options={})
21
- calculated_options = if(options[:all])
22
- symbolize_keys(options.to_h)
23
- else
24
- symbolize_keys(default_options).merge(symbolize_keys(options.to_h))
25
- end
26
- TerraformEnterprise::Commands::Formatter.render obj, calculated_options
27
- end
28
-
29
- def client
30
- settings = { }
31
- settings[:api_key] = options[:token] || ENV['TERRAFORM_ENTERPRISE_TOKEN']
32
- settings[:host] = options[:host] if options[:host]
33
- settings[:debug] = options[:debug] if options[:debug]
34
- TerraformEnterprise::Client.new(settings)
35
- end
36
-
37
- private
38
-
39
- def symbolize_keys(hash)
40
- JSON.parse(JSON[hash], symbolize_names: true)
41
- end
42
-
43
- end
44
- end
45
- end
46
- end
@@ -1,93 +0,0 @@
1
- require 'yaml'
2
- require 'colorize'
3
- require 'terminal-table'
4
-
5
- require 'terraform-enterprise-client'
6
-
7
- module TerraformEnterprise
8
- module Commands
9
- module Formatter
10
- def self.render(obj, options={})
11
- String.disable_colorization = !options[:color]
12
- if obj.is_a?(TerraformEnterprise::API::Response)
13
- if obj.code >= 200 && obj.code < 300
14
- if obj.resources
15
- puts render_resource_table(obj.resources, options)
16
- elsif obj.resource
17
- puts render_resource(obj.resource, options)
18
- else
19
- puts "Success (#{obj.code})".green
20
- end
21
- elsif obj.has_errors?
22
- obj.errors.each do |error|
23
- if error['status'] && error['title']
24
- puts "Error (#{error['status']}): #{error['title']}".red
25
- else
26
- puts "Error (#{obj.code}): #{error}".red
27
- end
28
- exit(false)
29
- end
30
- else
31
- puts "Unknown server response (#{obj.code})".yellow
32
- puts obj.body
33
- exit(false)
34
- end
35
- else
36
- puts "Unknown content".yellow
37
- puts obj
38
- exit(false)
39
- end
40
- end
41
-
42
- private
43
-
44
- def self.parse_resource(resource, options)
45
- parsed_resource = flatten_dotted_hash(resource.attributes)
46
- parsed_resource = {'id' => resource.id}.merge(parsed_resource) if resource.id
47
- (options[:except] || []).each do |excluded|
48
- parsed_resource.delete_if {|key,value| key.to_s.start_with?(excluded.to_s) }
49
- end
50
- if options[:only] && options[:only].length > 0
51
- parsed_resource.select! do |key, value|
52
- options[:only].any?{ |included| key.to_s.start_with?(included.to_s) }
53
- end
54
- end
55
- parsed_resource
56
- end
57
-
58
- def self.render_resource(resource, options)
59
- parsed_resource = parse_resource(resource, options)
60
- parsed_resource.keys.map do |key|
61
- value = parsed_resource[key]
62
- options[:value] ? value : "#{key.bold}: #{value}"
63
- end.join("\n")
64
- end
65
-
66
- def self.render_resource_table(resources, options)
67
- if options[:table] && !options[:value]
68
- parsed_resources = resources.map{|resource| parse_resource(resource,options)}
69
- keys = parsed_resources.map{|resource| resource.keys }.flatten.uniq
70
- rows = parsed_resources.map do |resource|
71
- keys.map{|key| resource[key]}
72
- end
73
- table = Terminal::Table.new headings: keys, rows: rows
74
- table
75
- else
76
- out = resources.map{|resource| render_resource(resource, options)}.join("\n#{'-' * 10}\n")
77
- end
78
- end
79
-
80
- def self.flatten_hash(h,f=[],g={})
81
- return g.update({ f=>h }) unless h.is_a?(Hash) || h.is_a?(Array)
82
- h.each { |k,r| flatten_hash(r,f+[k],g) } if h.is_a?(Hash)
83
- h.each_with_index { |r, k| flatten_hash(r,f+[k],g) } if h.is_a?(Array)
84
- g
85
- end
86
-
87
- def self.flatten_dotted_hash(source)
88
- flat = flatten_hash(source)
89
- flat.keys.each_with_object({}) { |key, h| h[key.join('.')] = flat[key] }
90
- end
91
- end
92
- end
93
- end
@@ -1,16 +0,0 @@
1
- require 'terraform-enterprise/commands/command'
2
- require 'terraform-enterprise-client'
3
-
4
- module TerraformEnterprise
5
- module Commands
6
- class OAuthTokensCommand < TerraformEnterprise::Commands::Command
7
- class_option :organization, required: true, type: :string, desc: STRINGS[:oauth_tokens][:attributes][:organization]
8
-
9
- desc 'list', STRINGS[:oauth_tokens][:commands][:list]
10
- option :table, type: :boolean, default: true, desc: STRINGS[:options][:table]
11
- def list
12
- render client.oauth_tokens.list(options)
13
- end
14
- end
15
- end
16
- end
@@ -1,30 +0,0 @@
1
- require 'terraform-enterprise/commands/command'
2
-
3
- module TerraformEnterprise
4
- module Commands
5
- class OrganizationsCommand < TerraformEnterprise::Commands::Command
6
- CMD_STR = STRINGS[:organizations][:commands]
7
-
8
- desc 'list', CMD_STR[:list]
9
- option :table, type: :boolean, default: true, desc: STRINGS[:options][:table]
10
- def list
11
- render client.organizations.list, only: [:id, :name, 'created-at', :email]
12
- end
13
-
14
- desc 'create <name> <email>', CMD_STR[:create]
15
- def create(name, email)
16
- render client.organizations.create(name: name, email: email)
17
- end
18
-
19
- desc 'get <name>', CMD_STR[:get]
20
- def get(name)
21
- render client.organizations.get(name:name)
22
- end
23
-
24
- desc 'delete <name>', CMD_STR[:delete]
25
- def delete(name)
26
- render client.organizations.delete(name:name)
27
- end
28
- end
29
- end
30
- end
@@ -1,79 +0,0 @@
1
-
2
-
3
- module TerraformEnterprise
4
- module Commands
5
- STRINGS = {
6
- options: {
7
- table: 'Format list output as a table'
8
- },
9
- workspaces: {
10
- attributes: {
11
- terraform_version: 'Version of Terraform to use for this workspace.',
12
- working_directory: 'Relative path that Terraform will execute within.',
13
- oauth_token: 'VCS Connection (OAuth Conection + Token) to use as identified; obtained from the oauth_tokens subcommand.',
14
- branch: 'Repository branch that Terraform will execute from.',
15
- ingress_submodules: 'Submodules should be fetched when cloning the VCS repository.',
16
- repo: 'Reference to VCS repository in the format :org/:repo.',
17
- import_legacy: 'Specifies the legacy Environment to use as the source of the migration/',
18
- organization: 'Organization to which this workspaces belongs to.',
19
- auto_apply: 'Auto-apply enabled',
20
- },
21
- commands: {
22
- create: 'Create a new workspace',
23
- list: 'List worksapces in the organization',
24
- get: 'Get workspace details by name',
25
- delete: 'Delete the workspace',
26
- update: 'Update the workspace',
27
- lock: 'Lock the workspace by workspace ID',
28
- unlock: 'Unlock the workspace by workspace ID'
29
- }
30
- },
31
- organizations: {
32
- commands: {
33
- create: 'Create a new organization',
34
- list: 'List all the organizations',
35
- get: 'Get organization details by name',
36
- delete: 'Delete the organization',
37
- },
38
- attributes: { }
39
- },
40
- teams: {
41
- commands: {
42
- create: 'Create a new team',
43
- delete: 'Delete the team by ID',
44
- list: 'List teams in organization',
45
- get: 'Get team details'
46
- },
47
- attributes: {
48
- organization: 'Organization to which this Team belongs to.'
49
- }
50
- },
51
- oauth_tokens: {
52
- commands: {
53
- list: 'List the OAuth tokens in the organization'
54
- },
55
- attributes: {
56
- organization: 'Organization to which this OAuth Token belongs to.'
57
- }
58
- },
59
- variables: {
60
- commands: {
61
- create: 'Create a new variable',
62
- delete: 'Delete the variable by ID',
63
- get: 'Get variable details',
64
- list: 'List variables in organization',
65
- update: 'Update a variable by ID',
66
- },
67
- attributes: {
68
- organization: 'Organization to which this Variable belongs to.',
69
- workspace: 'Workspace to which this Variable belongs to.',
70
- category: 'The type of cateogry, probably "terrafomr" or "environment"',
71
- hcl: 'Variable should be parsed using HCL',
72
- sensitive:'Variable should be marked as sensitive',
73
- value: 'Variable value',
74
- key: 'Variable key',
75
- }
76
- },
77
- }
78
- end
79
- end