1
0

add terraform snippets

This commit is contained in:
2025-04-02 20:42:40 +02:00
parent 7d3ef607c2
commit 3993cd733e

View File

@@ -0,0 +1,297 @@
-- Terraform snippets
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local c = ls.choice_node
local d = ls.dynamic_node
local sn = ls.snippet_node
local fmt = require("luasnip.extras.fmt").fmt
local rep = require("luasnip.extras").rep
-- Return a table of snippets for Terraform
-- stylua: ignore start
return {
-- Terraform block
s("terraform", fmt([[
terraform {{
required_version = ">= {}"
required_providers {{
{}
}}
{}
}}
]], {
i(1, "1.0.0"),
i(2, 'aws = {\n source = "hashicorp/aws"\n version = "~> 4.0"\n }'),
i(3, ""),
})),
-- Provider block
s("provider", fmt([[
provider "{}" {{
{}
}}
]], {
i(1, "aws"),
i(2, 'region = "us-west-2"'),
})),
-- AWS Provider with profile
s("aws", fmt([[
provider "aws" {{
region = "{}"
profile = "{}"
}}
]], {
i(1, "us-west-2"),
i(2, "default"),
})),
-- Resource block
s("resource", fmt([[
resource "{}" "{}" {{
{}
}}
]], {
i(1, "aws_s3_bucket"),
i(2, "example"),
i(3, ""),
})),
-- Data source block
s("data", fmt([[
data "{}" "{}" {{
{}
}}
]], {
i(1, "aws_ami"),
i(2, "example"),
i(3, 'owners = ["amazon"]'),
})),
-- Variable block
s("variable", fmt([[
variable "{}" {{
description = "{}"
type = {}
default = {}
{}
}}
]], {
i(1, "example"),
i(2, "Example variable"),
c(3, {
t("string"),
t("number"),
t("bool"),
t("list(string)"),
t("map(string)"),
t("object({})"),
sn(nil, {t("list(object({"), i(1, "name = string, value = string"), t("}))")}),
}),
c(4, {
t('null'),
sn(nil, {t('"'), i(1, "default_value"), t('"')}),
sn(nil, {t('true')}),
sn(nil, {t('false')}),
sn(nil, {t('123')}),
sn(nil, {t('['), i(1, '"item1", "item2"'), t(']')}),
sn(nil, {t('{'), i(1, 'key = "value"'), t('}')}),
}),
i(5, ""),
})),
-- Output block
s("output", fmt([[
output "{}" {{
description = "{}"
value = {}
{}
}}
]], {
i(1, "example"),
i(2, "Example output"),
i(3, "aws_instance.example.id"),
c(4, {
t(""),
t("sensitive = true"),
}),
})),
-- Local block
s("locals", fmt([[
locals {{
{} = {}
}}
]], {
i(1, "example"),
i(2, '"value"'),
})),
-- Module block
s("module", fmt([[
module "{}" {{
source = "{}"
{}
}}
]], {
i(1, "example"),
i(2, "./modules/example"),
i(3, "# Module inputs"),
})),
-- Backend block
s("backend", fmt([[
backend "{}" {{
{}
}}
]], {
i(1, "s3"),
i(2, 'bucket = "terraform-state"\nkey = "path/to/state.tfstate"\nregion = "us-west-2"'),
})),
-- Conditional expression
s("condition", fmt([[
{} ? {} : {}
]], {
i(1, "var.environment == \"prod\""),
i(2, "\"production\""),
i(3, "\"development\""),
})),
-- For expression
s("for", fmt([[
[for {} in {} : {}]
]], {
i(1, "item"),
i(2, "var.list"),
i(3, "item.name"),
})),
-- For expression with index
s("fori", fmt([[
[for {}, {} in {} : {}]
]], {
i(1, "index"),
i(2, "item"),
i(3, "var.list"),
i(4, "\"${index}-${item.name}\""),
})),
-- For expression with map
s("formap", fmt([[
{{for {} in {} : {} => {}}}
]], {
i(1, "item"),
i(2, "var.list"),
i(3, "item.key"),
i(4, "item.value"),
})),
-- Count parameter
s("count", fmt([[
count = {}
{}[count.index]
]], {
i(1, "var.create_resource ? 1 : 0"),
i(2, "# Reference this resource elsewhere using aws_instance.example"),
})),
-- For each parameter
s("foreach", fmt([[
for_each = {}
{}
]], {
c(1, {
sn(nil, {t("toset(["), i(1, "\"item1\", \"item2\""), t("])")}),
sn(nil, {t("{"), i(1, "key1 = \"value1\", key2 = \"value2\""), t("}")}),
sn(nil, {t("var."), i(1, "map_variable")}),
}),
i(2, "# Reference this resource elsewhere using aws_instance.example[each.key]"),
})),
-- Dynamic block
s("dynamic", fmt([[
dynamic "{}" {{
for_each = {}
content {{
{}
}}
}}
]], {
i(1, "ingress"),
i(2, "var.ingress_rules"),
i(3, "from_port = ingress.value.from_port\n to_port = ingress.value.to_port\n protocol = ingress.value.protocol\n cidr_blocks = ingress.value.cidr_blocks"),
})),
-- Lifecycle block
s("lifecycle", fmt([[
lifecycle {{
{}
}}
]], {
c(1, {
t("create_before_destroy = true"),
t("prevent_destroy = true"),
t("ignore_changes = [tags]"),
sn(nil, {t("ignore_changes = ["), i(1, "attribute"), t("]")}),
t("create_before_destroy = true\n prevent_destroy = true\n ignore_changes = [tags]"),
}),
})),
-- Terraform workspace
s("workspace", fmt([[
terraform.workspace
]], {})),
-- Depends on
s("depends", fmt([[
depends_on = [
{},
]
]], {
i(1, "aws_iam_role_policy.example"),
})),
-- Provisioner
s("provisioner", fmt([[
provisioner "{}" {{
{}
}}
]], {
c(1, {
t("local-exec"),
t("remote-exec"),
t("file"),
}),
c(2, {
sn(nil, {t('command = "'), i(1, "echo hello"), t('"')}),
sn(nil, {t('inline = [\n "'), i(1, "echo hello"), t('",\n ]')}),
sn(nil, {t('source = "'), i(1, "scripts/setup.sh"), t('"\n destination = "'), i(2, "/tmp/setup.sh"), t('"')}),
}),
})),
-- Null resource
s("null", fmt([[
resource "null_resource" "{}" {{
triggers = {{
{} = {}
}}
{}
}}
]], {
i(1, "example"),
i(2, "trigger"),
i(3, "uuid()"),
i(4, "# Provisioners or depends_on go here"),
})),
}
-- stylua: ignore end