cue modules: move stdlib to pkg/alpha.dagger.io
In preparation for Europa, we will vendor multiple CUE modules: - `pkg/alpha.dagger.io`: legacy non-europa packages - `pkg/dagger.io`: core Europa packages - `pkg/universe.dagger.io`: Europa universe Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
75
pkg/alpha.dagger.io/terraform/terraform.cue
Normal file
75
pkg/alpha.dagger.io/terraform/terraform.cue
Normal file
@@ -0,0 +1,75 @@
|
||||
// Terraform operations
|
||||
package terraform
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"alpha.dagger.io/dagger"
|
||||
"alpha.dagger.io/dagger/op"
|
||||
)
|
||||
|
||||
// Terraform configuration
|
||||
#Configuration: {
|
||||
|
||||
// Terraform version
|
||||
version: string | *"latest" @dagger(input)
|
||||
|
||||
// Source configuration
|
||||
source: dagger.#Artifact @dagger(input)
|
||||
|
||||
tfvars?: {
|
||||
...
|
||||
}
|
||||
|
||||
// Environment variables
|
||||
env: {
|
||||
[string]: string @dagger(input)
|
||||
}
|
||||
|
||||
state: #up: [
|
||||
op.#FetchContainer & {
|
||||
ref: "hashicorp/terraform:\(version)"
|
||||
},
|
||||
|
||||
op.#Copy & {
|
||||
from: source
|
||||
dest: "/src"
|
||||
},
|
||||
|
||||
if tfvars != _|_ {
|
||||
op.#WriteFile & {
|
||||
dest: "/src/terraform.tfvars.json"
|
||||
content: json.Marshal(tfvars)
|
||||
}
|
||||
},
|
||||
|
||||
op.#Exec & {
|
||||
args: ["terraform", "init"]
|
||||
dir: "/src"
|
||||
"env": env
|
||||
},
|
||||
|
||||
op.#Exec & {
|
||||
args: ["terraform", "apply", "-auto-approve"]
|
||||
always: true
|
||||
dir: "/src"
|
||||
"env": env
|
||||
},
|
||||
]
|
||||
|
||||
output: {
|
||||
#up: [
|
||||
op.#Load & {from: state},
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", "terraform output -json > /output.json"]
|
||||
dir: "/src"
|
||||
"env": env
|
||||
},
|
||||
op.#Export & {
|
||||
source: "/output.json"
|
||||
format: "json"
|
||||
},
|
||||
]
|
||||
...
|
||||
} @dagger(output)
|
||||
}
|
73
pkg/alpha.dagger.io/terraform/tests/terraform.cue
Normal file
73
pkg/alpha.dagger.io/terraform/tests/terraform.cue
Normal file
@@ -0,0 +1,73 @@
|
||||
package terraform
|
||||
|
||||
import (
|
||||
"alpha.dagger.io/dagger"
|
||||
"alpha.dagger.io/dagger/op"
|
||||
"alpha.dagger.io/alpine"
|
||||
)
|
||||
|
||||
TestData: dagger.#Artifact @dagger(input)
|
||||
|
||||
TestConfig: awsConfig: {
|
||||
accessKey: dagger.#Secret @dagger(input)
|
||||
secretKey: dagger.#Secret @dagger(input)
|
||||
region: "us-east-2"
|
||||
}
|
||||
|
||||
#TestGetConfig: {
|
||||
accessKey: dagger.#Secret
|
||||
|
||||
secretKey: dagger.#Secret
|
||||
|
||||
visibleAccessKey: string
|
||||
|
||||
visibleSecretKey: string
|
||||
|
||||
#up: [
|
||||
op.#Load & {from: alpine.#Image & {
|
||||
package: {
|
||||
bash: true
|
||||
jq: true
|
||||
}
|
||||
}},
|
||||
|
||||
op.#Exec & {
|
||||
always: true
|
||||
args: ["/bin/bash", "-c", #"""
|
||||
export ACCESS_KEY=$(cat /accessKey)
|
||||
export SECRET_KEY=$(cat /secretKey)
|
||||
|
||||
jq --arg key0 'visibleAccessKey' --arg value0 "$ACCESS_KEY" \
|
||||
--arg key1 'visibleSecretKey' --arg value1 "$SECRET_KEY" \
|
||||
'. | .[$key0]=$value0 | .[$key1]=$value1' <<< '{}' > /out
|
||||
"""#,
|
||||
]
|
||||
mount: {
|
||||
"/accessKey": secret: accessKey
|
||||
"/secretKey": secret: secretKey
|
||||
}
|
||||
},
|
||||
|
||||
op.#Export & {
|
||||
source: "/out"
|
||||
format: "json"
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
TestTerraform: {
|
||||
config: #TestGetConfig & {
|
||||
accessKey: TestConfig.awsConfig.accessKey
|
||||
secretKey: TestConfig.awsConfig.secretKey
|
||||
}
|
||||
|
||||
apply: #Configuration & {
|
||||
source: TestData
|
||||
env: {
|
||||
AWS_ACCESS_KEY_ID: config.visibleAccessKey
|
||||
AWS_SECRET_ACCESS_KEY: config.visibleSecretKey
|
||||
AWS_DEFAULT_REGION: TestConfig.awsConfig.region
|
||||
AWS_REGION: TestConfig.awsConfig.region
|
||||
}
|
||||
}
|
||||
}
|
34
pkg/alpha.dagger.io/terraform/tests/testdata/test.tf
vendored
Normal file
34
pkg/alpha.dagger.io/terraform/tests/testdata/test.tf
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
version = "3.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
backend "s3" {
|
||||
bucket = "dagger-ci"
|
||||
key = "terraform/tfstate"
|
||||
region = "us-east-2"
|
||||
}
|
||||
}
|
||||
|
||||
provider "random" {
|
||||
}
|
||||
|
||||
variable "input" {
|
||||
type = string
|
||||
}
|
||||
|
||||
resource "random_integer" "test" {
|
||||
min = 1
|
||||
max = 50
|
||||
}
|
||||
|
||||
output "random" {
|
||||
value = random_integer.test.result
|
||||
}
|
||||
|
||||
output "input" {
|
||||
value = var.input
|
||||
}
|
Reference in New Issue
Block a user