rspec-terraform 0.1.0.pre.48 → 0.1.0.pre.49
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +163 -10
- data/lib/rspec/terraform/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71e9d6c1dcc91011ceaaf7e50cb2f449453ed10157afa51675e644404df114cb
|
4
|
+
data.tar.gz: c7efffc268030aedb282fb8e72dfb2d7d1ee9ae97c8fe0896f08e3817aeb8a42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a57bb3067903397d0378278b20a4e1f91ff1e5fde1576a8e156221279d33d64a316d3704b6f5cbad2317e000e80a12ec4c152f7b7fcda731f1956516c7363f62
|
7
|
+
data.tar.gz: '094cc08b00bf0209439809d707636a1a4bcf112865bc6f6ce9a90b0d558719e11fcb18ad318bf4f81a08fed2938ce71057463cdf44a4f5abfc645c6ebbd7bd9a'
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# RSpec::Terraform
|
2
2
|
|
3
|
-
RSpec
|
3
|
+
An RSpec extension for verifying Terraform configurations, with support for:
|
4
|
+
|
5
|
+
* unit testing;
|
6
|
+
* integration testing;
|
7
|
+
* end-to-end testing; and
|
8
|
+
* change auditing.
|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
@@ -20,19 +25,167 @@ Or install it yourself as:
|
|
20
25
|
|
21
26
|
## Usage
|
22
27
|
|
23
|
-
|
28
|
+
To use RSpec::Terraform, require it in your `spec_helper.rb` file:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
require 'rspec/terraform'
|
32
|
+
```
|
33
|
+
|
34
|
+
When required, RSpec::Terraform automatically configures itself against
|
35
|
+
RSpec by:
|
36
|
+
|
37
|
+
* adding helper methods to interact with Terraform;
|
38
|
+
* adding matchers to verify Terraform plans; and
|
39
|
+
* adding settings to control RSpec::Terraform's behaviour.
|
40
|
+
|
41
|
+
The sections below provide further details on each of these additions.
|
42
|
+
|
43
|
+
### Helper methods
|
44
|
+
|
45
|
+
RSpec::Terraform adds helper methods to the RSpec DSL for planning, applying,
|
46
|
+
and destroying Terraform configurations, as well as accessing variables to and
|
47
|
+
outputs from Terraform configurations.
|
48
|
+
|
49
|
+
Each helper method takes a hash of parameters used to identify the configuration
|
50
|
+
against which to act and to provide as options to the Terraform command being
|
51
|
+
executed. Additionally, RSpec::Terraform includes a flexible approach to
|
52
|
+
resolving these parameters allowing them to be sourced from a variety of
|
53
|
+
locations. See the [Configuration Providers](#configuration-providers) section
|
54
|
+
for more details.
|
55
|
+
|
56
|
+
When executing helper methods, RSpec::Terraform provides two execution modes,
|
57
|
+
`:in_place` and `:isolated`. By default, RSpec::Terraform works against a
|
58
|
+
Terraform configuration _in place_, i.e., it executes commands against the
|
59
|
+
Terraform configuration directly, in the location specified. RSpec::Terraform
|
60
|
+
can also operate in an _isolated_ manner, wherein it initialises the
|
61
|
+
configuration into an isolated directory before executing commands. See the
|
62
|
+
[Execution Mode](#execution-mode) section for more details.
|
63
|
+
|
64
|
+
#### `plan`
|
65
|
+
|
66
|
+
The `plan` helper produces a Terraform plan for a configuration, reads it
|
67
|
+
into a Ruby representation and returns it.
|
68
|
+
|
69
|
+
`plan` requires a `:configuration_directory` parameter, representing the path
|
70
|
+
to the configuration to plan and is typically invoked in a `before(:context)`
|
71
|
+
hook, with the resulting plan stored for use in expectations:
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
before(:context) do
|
75
|
+
@plan = plan(
|
76
|
+
configuration_directory: 'path/to/configuration/directory'
|
77
|
+
)
|
78
|
+
end
|
79
|
+
```
|
80
|
+
|
81
|
+
If the configuration has input variables, a `:vars` parameter can be provided
|
82
|
+
as a hash:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
before(:context) do
|
86
|
+
@plan = plan(
|
87
|
+
configuration_directory: 'path/to/configuration/directory',
|
88
|
+
vars: {
|
89
|
+
region: 'uk',
|
90
|
+
zones: ['uk-a', 'uk-b'],
|
91
|
+
tags: {
|
92
|
+
name: 'important-thing',
|
93
|
+
role: 'persistence'
|
94
|
+
}
|
95
|
+
}
|
96
|
+
)
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
or within a block:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
before(:context) do
|
104
|
+
@plan = plan(
|
105
|
+
configuration_directory: 'path/to/configuration/directory'
|
106
|
+
) do |vars|
|
107
|
+
vars.region = 'uk'
|
108
|
+
vars.zones = ['uk-a', 'uk-b']
|
109
|
+
vars.tags = {
|
110
|
+
name: 'important-thing',
|
111
|
+
role: 'persistence'
|
112
|
+
}
|
113
|
+
end
|
114
|
+
end
|
115
|
+
```
|
116
|
+
|
117
|
+
`plan` accepts an optional `:state_file` parameter with the path to where the
|
118
|
+
current state file for the configuration is located, useful when checking the
|
119
|
+
incremental change that applying the configuration would have after a previous
|
120
|
+
apply.
|
121
|
+
|
122
|
+
Internally, `plan`:
|
123
|
+
* calls `terraform init` to initialise the configuration directory;
|
124
|
+
* calls `terraform plan` to produce a plan file;
|
125
|
+
* calls `terraform show` to read the contents of the plan file into a Ruby
|
126
|
+
representation; and
|
127
|
+
* deletes the plan file.
|
128
|
+
|
129
|
+
Any additional parameters passed to `plan` are passed on to the underlying
|
130
|
+
Terraform invocations.
|
131
|
+
|
132
|
+
#### `apply`
|
133
|
+
|
134
|
+
#### `destroy`
|
135
|
+
|
136
|
+
#### `output`
|
137
|
+
|
138
|
+
#### `var`
|
139
|
+
|
140
|
+
### Plan Matchers
|
141
|
+
|
142
|
+
### Settings
|
143
|
+
|
144
|
+
#### Binary Location
|
145
|
+
|
146
|
+
#### Logging and Standard Streams
|
147
|
+
|
148
|
+
#### Execution Mode
|
149
|
+
|
150
|
+
The benefit of isolated execution is that nothing is carried over between test
|
151
|
+
runs and providers and modules are fetched into a clean configuration directory
|
152
|
+
every time. The downside is additional test run time.
|
153
|
+
|
154
|
+
#### Configuration Providers
|
155
|
+
|
156
|
+
### Frequently Asked Questions
|
24
157
|
|
25
158
|
## Development
|
26
159
|
|
27
|
-
|
28
|
-
|
29
|
-
|
160
|
+
To install dependencies and run the build, run the pre-commit build:
|
161
|
+
|
162
|
+
```shell
|
163
|
+
./go
|
164
|
+
```
|
165
|
+
|
166
|
+
This runs all unit tests and other checks including coverage and code linting /
|
167
|
+
formatting.
|
168
|
+
|
169
|
+
To run only the unit tests, including coverage:
|
170
|
+
|
171
|
+
```shell
|
172
|
+
./go test:unit
|
173
|
+
```
|
174
|
+
|
175
|
+
To attempt to fix any code linting / formatting issues:
|
176
|
+
|
177
|
+
```shell
|
178
|
+
./go library:fix
|
179
|
+
```
|
180
|
+
|
181
|
+
To check for code linting / formatting issues without fixing:
|
182
|
+
|
183
|
+
```shell
|
184
|
+
./go library:check
|
185
|
+
```
|
30
186
|
|
31
|
-
|
32
|
-
|
33
|
-
`bundle exec rake release`, which will create a git tag for the version, push
|
34
|
-
git commits and tags, and push the `.gem` file to
|
35
|
-
[rubygems.org](https://rubygems.org).
|
187
|
+
You can also run `bin/console` for an interactive prompt that will allow you to
|
188
|
+
experiment.
|
36
189
|
|
37
190
|
### Managing CircleCI keys
|
38
191
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.pre.
|
4
|
+
version: 0.1.0.pre.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- InfraBlocks Maintainers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: confidante
|