lex-tfe 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70b7f70e681039dbaccf9544ca6a99eba1506c8918fb3b01245e4d4c6e7e971e
4
- data.tar.gz: 44fac6f7f48a727df2d5d416b62c7f2572216434817560d0db75d9d323ba4084
3
+ metadata.gz: 18086e141e73cf2b594633fe01dcb0090e46b6c7b4672d020c137b1e4ebcb962
4
+ data.tar.gz: 6ff86f6ea93d1100137e137d044810050c0a6559ae97bec15b6d3888beb62ebe
5
5
  SHA512:
6
- metadata.gz: 618c76447a6b4091b56c77c85ee47c4c651239bdc242fef20d6d0eb01b60170e876ceb07c5d4d3149d5effdaebf72c9db140e883fc733936699322876dbac559
7
- data.tar.gz: 8486d8c5fae9938417fbde075d0153fbb0633087f9cf1f45586039a8ed805e006de90167ba761958f78f75d31052899a63c9979efcfb9b91fbe9ada6b60eb07e
6
+ metadata.gz: ca61d93d4ce7875824d671986c8ad71697684ca7ce41c92065289cbc1dd6a3480b688af0bbda6c0b316268734c123635b5187f9dd45cbd9632249eeb585f0550
7
+ data.tar.gz: eb43b914c72ac808a4ead098e5cab34566f097ab7c59d5dd3633db13bce3c315a562c5607340d56209498ce8c4d488460baed96269aea2d6f14314937c2358f3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.1]
4
+
5
+ ### Changed
6
+ - Add legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport as runtime dependencies
7
+ - Update spec_helper to require sub-gem helpers before loading extension
8
+
3
9
  ## [0.1.0]
4
10
 
5
11
  ### Added
data/CLAUDE.md ADDED
@@ -0,0 +1,102 @@
1
+ # lex-tfe: Terraform Enterprise / HCP Terraform Integration for LegionIO
2
+
3
+ **Repository Level 3 Documentation**
4
+ - **Parent (Level 2)**: `/Users/miverso2/rubymine/legion/extensions/CLAUDE.md`
5
+ - **Parent (Level 1)**: `/Users/miverso2/rubymine/legion/CLAUDE.md`
6
+
7
+ ## Purpose
8
+
9
+ Legion Extension that connects LegionIO to Terraform Enterprise (TFE) and HCP Terraform. Provides runners for managing workspaces, runs, plans, applies, variables, variable sets, projects, organizations, state versions, and policy sets via the TFE REST API v2.
10
+
11
+ **GitHub**: https://github.com/LegionIO/lex-tfe
12
+ **License**: MIT
13
+ **Version**: 0.1.0
14
+
15
+ ## Architecture
16
+
17
+ ```
18
+ Legion::Extensions::Tfe
19
+ ├── Runners/
20
+ │ ├── Workspaces # list, get, create, update, delete, lock, unlock
21
+ │ ├── Runs # list_runs, get_run, create_run, apply_run, discard_run, cancel_run
22
+ │ ├── Plans # get_plan, get_plan_json_output, get_plan_log
23
+ │ ├── Applies # get_apply, get_apply_log
24
+ │ ├── Variables # list_variables, create_variable, update_variable, delete_variable
25
+ │ ├── VariableSets # list_variable_sets, get_variable_set, create_variable_set, update_variable_set,
26
+ │ │ # delete_variable_set, list_varset_variables, add_varset_variable
27
+ │ ├── Projects # list_projects, get_project, create_project, update_project, delete_project
28
+ │ ├── Organizations # list_organizations, get_organization
29
+ │ ├── StateVersions # list_state_versions, get_state_version, get_current_state_version
30
+ │ └── PolicySets # list_policy_sets, get_policy_set, list_workspace_policy_sets
31
+ ├── Helpers/
32
+ │ └── Client # Faraday connection builder (Bearer token auth)
33
+ ├── Errors # ReadOnlyError raised on write ops when read_only: true
34
+ └── Client # Standalone client class (includes all runners)
35
+ ```
36
+
37
+ ## Key Files
38
+
39
+ | Path | Purpose |
40
+ |------|---------|
41
+ | `lib/legion/extensions/tfe.rb` | Entry point, extension registration |
42
+ | `lib/legion/extensions/tfe/version.rb` | Version constant (0.1.0) |
43
+ | `lib/legion/extensions/tfe/helpers/client.rb` | Faraday connection builder with Bearer token auth |
44
+ | `lib/legion/extensions/tfe/errors.rb` | `ReadOnlyError` for read-only guard |
45
+ | `lib/legion/extensions/tfe/client.rb` | Standalone `Client` class |
46
+ | `lib/legion/extensions/tfe/runners/workspaces.rb` | Workspace CRUD + lock/unlock |
47
+ | `lib/legion/extensions/tfe/runners/runs.rb` | Run lifecycle management |
48
+ | `lib/legion/extensions/tfe/runners/plans.rb` | Plan retrieval and log streaming |
49
+ | `lib/legion/extensions/tfe/runners/applies.rb` | Apply retrieval and log streaming |
50
+ | `lib/legion/extensions/tfe/runners/variables.rb` | Workspace variable management |
51
+ | `lib/legion/extensions/tfe/runners/variable_sets.rb` | Variable set management |
52
+ | `lib/legion/extensions/tfe/runners/projects.rb` | Project CRUD |
53
+ | `lib/legion/extensions/tfe/runners/organizations.rb` | Organization list/get |
54
+ | `lib/legion/extensions/tfe/runners/state_versions.rb` | State version retrieval |
55
+ | `lib/legion/extensions/tfe/runners/policy_sets.rb` | Policy set list/get |
56
+
57
+ ## Connection
58
+
59
+ `Helpers::Client` builds a Faraday connection with `Authorization: Bearer <token>` header. The `url:` parameter accepts any TFE instance base URL (defaults to `https://app.terraform.io`). Supports both HCP Terraform SaaS and self-hosted TFE.
60
+
61
+ Common target URLs:
62
+ - `https://app.terraform.io` — HCP Terraform (SaaS)
63
+ - `https://terraform.uhg.com` — UHG app team TFE cluster
64
+ - `https://tfe-arc.uhg.com` — UHG Grid platform TFE cluster
65
+
66
+ ## Read-Only Guard
67
+
68
+ Each runner method that performs a write operation (create, update, delete, lock, unlock, apply, discard, cancel) accepts a `read_only:` boolean kwarg and raises `Legion::Extensions::Tfe::ReadOnlyError` before making any API call when it is `true`. The standalone `Client` class stores `read_only:` in `@opts` and forwards it automatically to all runner methods via `connection(**override)`.
69
+
70
+ ## Settings Reference
71
+
72
+ ```json
73
+ {
74
+ "extensions": {
75
+ "tfe": {
76
+ "url": "https://app.terraform.io",
77
+ "token": "vault://secret/tfe/api_token#value",
78
+ "read_only": false
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ ## Dependencies
85
+
86
+ | Gem | Purpose |
87
+ |-----|---------|
88
+ | `faraday` (>= 2.0) | HTTP client for TFE REST API v2 |
89
+
90
+ ## Testing
91
+
92
+ 72 specs across 5 spec files.
93
+
94
+ ```bash
95
+ bundle install
96
+ bundle exec rspec
97
+ bundle exec rubocop
98
+ ```
99
+
100
+ ---
101
+
102
+ **Maintained By**: Matthew Iverson (@Esity)
data/Gemfile.lock ADDED
@@ -0,0 +1,171 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ lex-tfe (0.1.1)
5
+ faraday (>= 2.0)
6
+ legion-cache (>= 1.3.11)
7
+ legion-crypt (>= 1.4.9)
8
+ legion-data (>= 1.4.17)
9
+ legion-json (>= 1.2.1)
10
+ legion-logging (>= 1.3.2)
11
+ legion-settings (>= 1.3.14)
12
+ legion-transport (>= 1.3.9)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ addressable (2.8.9)
18
+ public_suffix (>= 2.0.2, < 8.0)
19
+ amq-protocol (2.5.1)
20
+ ast (2.4.3)
21
+ aws-eventstream (1.4.0)
22
+ aws-sigv4 (1.12.1)
23
+ aws-eventstream (~> 1, >= 1.0.2)
24
+ base64 (0.3.0)
25
+ bigdecimal (4.0.1)
26
+ bunny (2.24.0)
27
+ amq-protocol (~> 2.3)
28
+ sorted_set (~> 1, >= 1.0.2)
29
+ concurrent-ruby (1.3.6)
30
+ connection_pool (2.5.5)
31
+ dalli (5.0.2)
32
+ logger
33
+ diff-lcs (1.6.2)
34
+ docile (1.4.1)
35
+ ed25519 (1.4.0)
36
+ faraday (2.14.1)
37
+ faraday-net_http (>= 2.0, < 3.5)
38
+ json
39
+ logger
40
+ faraday-net_http (3.4.2)
41
+ net-http (~> 0.5)
42
+ json (2.19.1)
43
+ json-schema (6.2.0)
44
+ addressable (~> 2.8)
45
+ bigdecimal (>= 3.1, < 5)
46
+ json_pure (2.8.1)
47
+ jwt (3.1.2)
48
+ base64
49
+ language_server-protocol (3.17.0.5)
50
+ legion-cache (1.3.11)
51
+ connection_pool (>= 2.4)
52
+ dalli (>= 3.0)
53
+ legion-logging (>= 1.2.8)
54
+ legion-settings (>= 1.3.12)
55
+ redis (>= 5.0)
56
+ legion-crypt (1.4.9)
57
+ ed25519 (~> 1.3)
58
+ jwt (>= 2.7)
59
+ vault (>= 0.17)
60
+ legion-data (1.4.17)
61
+ legion-logging (>= 1.2.8)
62
+ legion-settings (>= 1.3.12)
63
+ sequel (>= 5.70)
64
+ sqlite3 (>= 2.0)
65
+ legion-json (1.2.1)
66
+ json_pure
67
+ multi_json
68
+ legion-logging (1.3.2)
69
+ logger
70
+ rainbow (~> 3)
71
+ legion-settings (1.3.14)
72
+ legion-json (>= 1.2.0)
73
+ legion-transport (1.3.9)
74
+ bunny (>= 2.23)
75
+ concurrent-ruby (>= 1.2)
76
+ legion-json (>= 1.2.0)
77
+ legion-settings (>= 1.3.12)
78
+ logger
79
+ lint_roller (1.1.0)
80
+ logger (1.7.0)
81
+ mcp (0.8.0)
82
+ json-schema (>= 4.1)
83
+ mini_portile2 (2.8.9)
84
+ multi_json (1.19.1)
85
+ net-http (0.9.1)
86
+ uri (>= 0.11.1)
87
+ net-http-persistent (4.0.8)
88
+ connection_pool (>= 2.2.4, < 4)
89
+ parallel (1.27.0)
90
+ parser (3.3.10.2)
91
+ ast (~> 2.4.1)
92
+ racc
93
+ prism (1.9.0)
94
+ public_suffix (7.0.5)
95
+ racc (1.8.1)
96
+ rainbow (3.1.1)
97
+ rake (13.3.1)
98
+ rbtree (0.4.6)
99
+ redis (5.4.1)
100
+ redis-client (>= 0.22.0)
101
+ redis-client (0.28.0)
102
+ connection_pool
103
+ regexp_parser (2.11.3)
104
+ rspec (3.13.2)
105
+ rspec-core (~> 3.13.0)
106
+ rspec-expectations (~> 3.13.0)
107
+ rspec-mocks (~> 3.13.0)
108
+ rspec-core (3.13.6)
109
+ rspec-support (~> 3.13.0)
110
+ rspec-expectations (3.13.5)
111
+ diff-lcs (>= 1.2.0, < 2.0)
112
+ rspec-support (~> 3.13.0)
113
+ rspec-mocks (3.13.8)
114
+ diff-lcs (>= 1.2.0, < 2.0)
115
+ rspec-support (~> 3.13.0)
116
+ rspec-support (3.13.7)
117
+ rspec_junit_formatter (0.6.0)
118
+ rspec-core (>= 2, < 4, != 2.12.0)
119
+ rubocop (1.85.1)
120
+ json (~> 2.3)
121
+ language_server-protocol (~> 3.17.0.2)
122
+ lint_roller (~> 1.1.0)
123
+ mcp (~> 0.6)
124
+ parallel (~> 1.10)
125
+ parser (>= 3.3.0.2)
126
+ rainbow (>= 2.2.2, < 4.0)
127
+ regexp_parser (>= 2.9.3, < 3.0)
128
+ rubocop-ast (>= 1.49.0, < 2.0)
129
+ ruby-progressbar (~> 1.7)
130
+ unicode-display_width (>= 2.4.0, < 4.0)
131
+ rubocop-ast (1.49.1)
132
+ parser (>= 3.3.7.2)
133
+ prism (~> 1.7)
134
+ ruby-progressbar (1.13.0)
135
+ sequel (5.102.0)
136
+ bigdecimal
137
+ simplecov (0.22.0)
138
+ docile (~> 1.1)
139
+ simplecov-html (~> 0.11)
140
+ simplecov_json_formatter (~> 0.1)
141
+ simplecov-html (0.13.2)
142
+ simplecov_json_formatter (0.1.4)
143
+ sorted_set (1.1.0)
144
+ rbtree
145
+ sqlite3 (2.9.2)
146
+ mini_portile2 (~> 2.8.0)
147
+ sqlite3 (2.9.2-arm64-darwin)
148
+ unicode-display_width (3.2.0)
149
+ unicode-emoji (~> 4.1)
150
+ unicode-emoji (4.2.0)
151
+ uri (1.1.1)
152
+ vault (0.20.0)
153
+ aws-sigv4
154
+ base64
155
+ connection_pool (~> 2.4)
156
+ net-http-persistent (~> 4.0, >= 4.0.2)
157
+
158
+ PLATFORMS
159
+ arm64-darwin-25
160
+ ruby
161
+
162
+ DEPENDENCIES
163
+ lex-tfe!
164
+ rake
165
+ rspec
166
+ rspec_junit_formatter
167
+ rubocop
168
+ simplecov
169
+
170
+ BUNDLED WITH
171
+ 2.6.9
data/README.md CHANGED
@@ -35,7 +35,7 @@ Supported base URLs:
35
35
  ## Standalone Client Usage
36
36
 
37
37
  ```ruby
38
- require 'lex-tfe'
38
+ require 'legion/extensions/tfe'
39
39
 
40
40
  client = Legion::Extensions::Tfe::Client.new(
41
41
  url: 'https://terraform.uhg.com',
@@ -69,6 +69,8 @@ client.create_variable(
69
69
 
70
70
  ### Read-only mode
71
71
 
72
+ Pass `read_only: true` to `Client.new`. The flag is stored in `@opts` and forwarded automatically to every runner method — no need to pass it per call.
73
+
72
74
  ```ruby
73
75
  client = Legion::Extensions::Tfe::Client.new(
74
76
  url: 'https://terraform.uhg.com',
@@ -80,7 +82,7 @@ client = Legion::Extensions::Tfe::Client.new(
80
82
  client.list(organization: 'my-org')
81
83
 
82
84
  # Raises Legion::Extensions::Tfe::ReadOnlyError
83
- client.create(organization: 'my-org', name: 'ws', read_only: client.opts[:read_only])
85
+ client.create(organization: 'my-org', name: 'ws')
84
86
  ```
85
87
 
86
88
  ## Runners
@@ -177,10 +179,13 @@ client.create(organization: 'my-org', name: 'ws', read_only: client.opts[:read_o
177
179
  | `get_policy_set` | Get a policy set by ID |
178
180
  | `list_workspace_policy_sets`| List policy sets attached to a workspace |
179
181
 
180
- ## Development
182
+ ## Requirements
181
183
 
182
- ```bash
183
- bundle install
184
- bundle exec rspec
185
- bundle exec rubocop
186
- ```
184
+ - Ruby >= 3.4
185
+ - [LegionIO](https://github.com/LegionIO/LegionIO) framework (optional for standalone client usage)
186
+ - Terraform Enterprise or HCP Terraform API token
187
+ - `faraday` >= 2.0
188
+
189
+ ## License
190
+
191
+ MIT
data/lex-tfe.gemspec CHANGED
@@ -26,5 +26,12 @@ Gem::Specification.new do |spec|
26
26
  end
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.add_dependency 'faraday', '>= 2.0'
29
+ spec.add_dependency 'faraday', '>= 2.0'
30
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
31
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
32
+ spec.add_dependency 'legion-data', '>= 1.4.17'
33
+ spec.add_dependency 'legion-json', '>= 1.2.1'
34
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
35
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
36
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
30
37
  end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Tfe
6
- VERSION = '0.1.0'
6
+ VERSION = '0.1.1'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-tfe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Iverson
@@ -23,6 +23,104 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: legion-cache
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.11
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.3.11
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-crypt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.9
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.4.9
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-data
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.4.17
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.4.17
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-json
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.2.1
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.2.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-logging
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.2
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.2
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-settings
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.14
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.14
110
+ - !ruby/object:Gem::Dependency
111
+ name: legion-transport
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 1.3.9
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 1.3.9
26
124
  description: Connects LegionIO to Terraform Enterprise / HCP Terraform
27
125
  email:
28
126
  - matthewdiverson@gmail.com
@@ -34,7 +132,9 @@ files:
34
132
  - ".rspec"
35
133
  - ".rubocop.yml"
36
134
  - CHANGELOG.md
135
+ - CLAUDE.md
37
136
  - Gemfile
137
+ - Gemfile.lock
38
138
  - LICENSE
39
139
  - README.md
40
140
  - lex-tfe.gemspec