terraformconsole对于检查terraform状态非常有用,但令人恼火的是,资源名称、数据源等没有标签完成
可能吗?如果是,启用它的步骤是什么
(对于我来说,terraformCLI工具的基本bash完成工作与预期一样正常。只有在terraform控制台中,选项卡没有任何用处。)terraform控制台工作正常,但是您能提供命令的详细信息来显示真正的问题吗?terraform console目前没有选项卡完成功能。插值语言目前没有检查完成所需的钩子。这可能最终会发生,但不是在不久的将
请注意,这是一个关于自定义生成提供程序如何处理错误流的可能性的设计问题。无论流动是否良好。。。这是另一个问题
假设有两种资源(A和B),其中B依赖于A
当我运行terraform apply时,资源A被创建(意味着后端创建了一个ID为的对象),但在创建任务后处于错误(error)状态。我想建立的是一个能够识别这种不良状态的提供者,在它继续尝试创建资源B之前,就停止它。不过,我也希望Terraform能够在不良状态下清理资源(通过销毁或污染),甚至在我手动修复后端的问题后,继续前进而不重新创建它
我在地形上面临一个问题。我正在尝试使用变量文件中预定义的CIDR范围来配置VPC和子网。下面是变量文件即variables.tf中的代码片段
variable "vpc-fullcidr" {
description = "VPC CIDR range"
type = "list"
default = ["10.0.0.0/16", "192.168.0.0/16"]
}
variable "subnet-cidr" {
description = "Subnet CIDR ra
我有一些示例代码:
创建一个EC2实例
创建并添加我的公钥
但我希望它是幂等的。i、 e.如果密钥存在,则它仍将运行,不会因错误而失败
我不知道该怎么做。有什么建议吗
示例代码:
provider "aws" {
region = "eu-west-1"
}
module ec2 {
source = "./ec2_instance"
name = "EC2 Instance"
}
resource "aws_key_pair" "my_key" {
key_name
因此,terraform项目的简化结构如下
environemnt1/
-main.tf (includes module, backend, environment)
environemnt2/
-main.tf
modules/
resources (includes resources, variables etc)
本案试图处理州档案丢失的情况
当对环境1使用important时,资源必须在环境中(main.tf)。我可以成功地将资源导入此环境。尽管如此,正常模式将环境馈送到资
标签: Terraform
amazon-elbterraform-provider-aws
在Terraform创建aws_lb时,是否有办法获取aws_lb资源的分配IP地址
如中所示,我们可以找到与ELB关联的IP地址
打开位于的Amazon EC2控制台
在导航窗格中,选择网络接口
在搜索字段中,键入网络负载平衡器的名称。
每个负载平衡器子网有一个网络接口
在每个网络接口的详细信息选项卡上,从
主专用IPv4 IP
背景
为了能够将安全组设置为白名单,网络负载平衡器的ELB IP地址不能没有中的安全组
已考虑,但不适用于错误
错误:找不到匹配的网络接口
另外,我认为datasou
我有两个谷歌云项目:[project1]和[project2]。[project1]有一个名为my vm的虚拟机实例。我想将我的vm复制到[project2]
我做的步骤
因此,我创建了这个地形文件main.tf:
将其保存到新目录中。现在,运行以下命令:
$ terraform init
$ terraform import google_compute_instance.my-vm [project1]/us-central1-a/my-vm
Error: resource address
我想在另一个资源块中引用子网2的id,但子网没有索引值。i、 e“${azurerm_virtual_network.test.subnet.2.id}”将无法工作
resource "azurerm_virtual_network" "test" {
name = "virtualNetwork1"
location = "${azurerm_resource_group.test.location}"
resource_grou
标签: Terraform
terraform-provider-awsterraform0.12+
我正在使用terraform 0.12.8,我正在尝试编写一个资源,它将迭代以下变量结构:
variable "applications" {
type = map(string)
default = {
"app1" = "test,dev,prod"
"app2" = "dev,prod"
}
}
我的资源:
resource "aws_iam_user" "custom" {
for_each = var.applications
na
我们是否可以通过多种变量类型传递映射变量,例如列表[]和字符串
identity = {
type = var.identity.type
identity_ids = var.identity.identity_ids
}
正在处理WebApp模块,其中我需要传递托管用户标识的条件值
标识块支持以下功能:
type-(必选)指定应用程序服务的标识类型。可能的值包括SystemAssigned(Azure将在其中为您生成服务主体)、UserAssigned(您可以在id
是否可以在Terraform或Terragrunt中为模块源使用变量。使用Terragrunt,我知道我们可以将模块源代码覆盖到本地目录,但它似乎不允许我们使用不同的repo
该用例用于支持开发存储库和活动存储库。开发人员将使用与生产/实时部署不同的存储库来开发模块
我熟悉使用Terragrunt方法来分离环境。我们可以这样做,例如,live文件夹中的配置将指向一个repo,而dev/qa文件夹中的配置将指向另一个repo
代码片段:
module "s3_module" {
source
在这里与谷歌云合作。我刚从GCP将一个“项目”资源导入Terraform。我看到了以下问题-
资源没有全面导入。资源“项目”有多个要设置的参数-每个参数都是它们自己的资源。正如您在下面看到的,有'.project'来命名项目,'.new_service_project'将其转换为服务项目,还有'.project_service[n]'用于该项目的每个启用API
module.project_12.google_compute_shared_vpc_service_project.new_serv
在云构建中使用terraform,但在这一步失败
步骤:
#地形
-id:“配置地形”
名称:节点:10.16.3
入口点:“节点”
参数:[“/create_terraform_config.js”,
“./terraform/override.tf”,
“${u TERRAFORM\u BUCKET\u NAME}”,
“${u地形\ u桶\路径}”]
目录:“应用程序/脚本”
-id:“初始地形”
名称:hashicorp/地形:light
args:[“init”]
dir:“app/
我试图使用Terraform部署Lambda函数,其中我的源文件位于与我的Terraform文件相邻的不同目录中。我想让Terraform为我压缩源文件,并将它们部署到Lambda中。不过,Terraform似乎不想承认我的文件在那里
我的目录结构:
project_root/
deployment/
terraform/
my-terraform.tf
function_source/
function.py
我希望它将所有内容打包到function\u
我正在使用main.tf文件将模块地形化,如下所示:
module "jenkins" {
install_jenkins = "${var.install_jenkins}"
jenkins_plugins_list = "${var.jenkins_plugins_list}"
}
module "kube" {
source = "../../../../modules-terraform/kube_internal"
cluster_count = "${
我有四种不同的环境:
发展
坐着
uat
刺激
每个环境的参数组值都不同。每个环境的变量文件中将包含以下值
以下是示例AWS RDS参数组的参数。在其他环境中,可能有更多或更少的参数:
parameter {
name = "character_set_client"
value = "utf8mb4"
}
parameter {
name = "character_set_connection"
value = "utf8mb4"
}
parameter {
nam
标签: Terraform
azure-storageazure-storage-files
我使用terraform来配置存储帐户、容器和共享
出现了一个问题-我可以将文件上载到Azure存储帐户与terraform共享的文件吗?我找不到相应的资源
编辑1
一个想法是使用null_资源。我想知道它如何与使用terraform的好处相匹配,我认为:
还可以将其视为基础架构的文档。
它可以在做之前告诉你它将要做什么。
2的一个变体-它使您能够自动检查计划并强制执行策略。
它的状态可以用来回答关于发布管道到底配置了什么的审计问题。
它有一个非常简单的声明性语言。
其他潜在的好处可能是强制执行
阅读此处的文档:
我们可以定义后端服务:
resource "google_compute_backend_service" "kubernetes-nginx-prod" {
name = "kubernetes-nginx-prod"
health_checks = [google_compute_health_check.kuber
我有一个beanstalk模块,它有一个用于aws_elastic_beanstalk_环境的地形资源,该环境从地图加载环境变量
resource "aws_elastic_beanstalk_environment" "default" {
name = module.label.id
...
...
dynamic "setting" {
for_each = var.en
正在尝试使用版本:concurv1.8.4在Ubuntu 18.04上设置单节点concur。我使用自己的用户启动
我的consur.service文件如下所示
[Service]
ExecStart=/opt/consul/bin/consul agent –server –ui –data-dir=/temp/consul –bootstrap-expect=1 –node=vault –bind=192.168.37.128 –config-dir=/etc/consul.d
sudo
用例:
使用分配给每个VM的公共ip创建X个VM
到目前为止的研究发现,之前的发行单创建日期为2017年。()其中@apparentlymart讨论了这个问题
修复方法是,在terraform v0.12中,添加了对单个常量的显式支持,这些常量是在依赖项中添加以供参考的
我的回购协议:
试图创建一个模块来创建X个azure linux计算,第一个VM创建得非常完美,但“2X”请求中的第二个计算单元没有正确创建。动态IP已创建,但未分配给与第二个VM关联的NIC。我的理解是,因为计数的资源被视为单
我使用的是TerraformV0.13.5
我有多个项目,因此有多个配置文件。
如果有必要的话,我也在使用s3共享状态
我在provider.tf中声明了以下内容
shared_credentials_file = "~/.aws/credentials"
profile = "profile_name"
但我得到了一个错误:
错误:配置Terraform AWS提供程序时出错:没有有效凭据
找到Terraform AWS提供程序的源
如果我还导出
为了让Terraform从本地文件系统中的给定路径而不是从远程Terraform注册表请求云拷贝,需要在下面的示例中使用什么特定语法?
类似于src=C:\path\to\terraform\aws\provider\binary
我记得Mitchel Hashimoto解释说这是HashiConf期间的一项新功能,但我似乎找不到文档。您应该能够在CLI配置中设置它,如下所述:
provider "aws" {
region = var._region
acc
标签: Terraform
terraform-provider-awsterraform-modules
我尝试在模块上循环,循环次数等于贴图在嵌套贴图列表中出现的次数,如下所示:
vars.tf
variable "http_tcp_listeners" {
description = "A list of maps describing the HTTP listeners or TCP ports for this NLB"
type = any
default = [
{
"http_tcp_
我有一个模块,可以为一个名称列表创建多个资源。因此,对于名为instances的变量中提供的每个名称,将创建一组资源(vm、端口、卷)。
在该模块的输出中,我希望有一个映射,它将实例(instances实例中的每个值)映射到相关端口的IP
这是端口的定义
resource "openstack_networking_port_v2" "this" {
for_each = var.instances
name = &q
我的terraform模块中有一个部分,它从多个文件中读取文本并将它们连接在一起
foo = join("\n", [
file('path/to/file1.txt'),
file('path/to/file2.txt'),
file('path/to/file3.txt'),
])
总是列出每个文件很麻烦,我想切换到使用:fileset(“path/to”,“*.txt”)列出所有文件
但是,这给了我一个文件路径列表,我不能给file()。是否有某种方法可以
我有几个Azure资源是使用for_each属性创建的,然后这些资源也有一个Application Insights资源是使用for_each属性创建的
以下是创建azurerm_应用程序的代码:
resource "azurerm_application_insights" "applicationInsights" {
for_each = toset(keys(merge(local.appServices, local.f
标签: Terraform
local-variablesterraform-provider-azure
我有一个如下所示的局部值,我想从中删除Mongo-S对,因为它没有dbv值
merged_mongo_locals = {
MongoA-0 = {
az = "ap-south-1a"
dbv = 50
service_name = "MongoA"
}
MongoC-0 = {
az
我正在尝试设置一个别名,以便在中创建AWS实例时快速ssh到新创建的主机中。我通过跑步来做到这一点
# Handy alias to quickly ssh into newly created host
provisioner "local-exec" {
command = "alias sshopenldap='ssh -i ${var.key_path} ubuntu@${aws_instance.ldap_instance.public_dns}'"
}
当我看到此执行的输出
我需要从IP地址列表生成键/值对的映射
输入示例:
ips = [ "1.2.3.4", "2.3.4.5"]
期望输出:
pairs = [ {ip_address="1.2.3.4"}, {ip_address="2.3.4.5"} ]
我的TF输入数据位于openstack\u networking\u port\u v2.vip.*.all\u fixed\u ips.0(任意数量的ip地址),我需要为openstack\u networking\u port\u v2生成允许的\u
我们为terraform开发了两个提供程序插件,但没有指定版本。然后,对于我们自己的控制,我们开始在构建时使用ldflags进行版本设置:
go build -ldflags '-X \"main.VersionString=#{VERSION} (#{REVISION})\"' -o '#{WS}/#{PROJECT_NAME}' main.go"
在守则中:
package main
import(
"github.com/hashicorp/terraform/plugin"
这是我的规则
resource "cloudflare_page_rule" "https-only" {
zone = "${var.domain}"
target = "http://*${var.domain}/*"
priority = 1
actions = {
always_use_https = true,
}
}
文档中说始终使用\u https的默认值为false。我想为该区域的所有http流量启用此规则
当我应用该规
我在Terraform(v0.11.7)中有下一个表达式:
我需要将字符串附加到正确的表达式中,例如:
my_expression = "${zipmap(random_shuffle.x.result, "*" + random_shuffle.x.result)}"
我有什么解决办法吗?
提前感谢实现此目标的一种方法如下:
my_expression = "${zipmap(random_shuffle.x.result,formatlist("*%s",random_shuffle.x.
在base.tf文件中,我有:
data "consul_keys" "project_emails"{
datacenter = "mine1"
key {
name = "notification_list"
path = "project/notification_email_list"
}
}
我想在python代码中使用这些concur变量。
我的想法是将其输出到一个文件中。(所以不仅仅是另一个terraform文件,它使用版本11或12的“${proje
我已经创建了多个子网[私有/公共],通过在Terraform中使用for_,如下所示
resource "aws_subnet" "public" {
for_each = toset(data.aws_availability_zones.azs.names)
vpc_id = aws_vpc.vpc.id
cidr_block = cidrsubnet(var.private_ranges,1 ,index(data.aws_availability_zones.azs.name
我需要使用Terraform在Pagerduty中创建一个升级策略。我想动态创建规则块,然后在这些块中使用规则中的值创建目标块。我不知道如何在目标块内进行第二次调用以使其动态。
我有一个列表中的团队列表
locals {
teams = [
[data.pagerduty_schedule.ce_ooh_schedule.id, data.pagerduty_schedule.pi_office_hours_schedule.id],
[data.pagerduty_sche
标签: Terraform
terraform-provider-awsterraform0.12+
我想创建一个模块,该模块可以接受环境(开发、测试、产品)的输入,并使用适当的标记创建子网的数量(“每个环境的应用”和“数据库”子网)。e、 g Name=dev应用程序
当输入变量更新时,模块应能灵活地添加/删除子网。
我的模板如下所示
variable "environments" {
type = map(object({
app_subnet_cidr = string
db_subnet_cidr = string
}))
default = {
de
我正在尝试使用Terraform在Cisco ACI上创建一个EPG。已创建EPG,但未连接Leaf的接口。
连接Leaf接口的terraform synthax是:
resource "aci_application_epg" "VLAN-616-EPG" {
...
relation_fv_rs_path_att = ["topology/pod-1/paths-103/pathep-[eth1/1]"]
...
}
当我通过ACI web界面或REST AP
我有两个目标组-一个用于端口80,另一个用于端口443。还有两个实例作为NLB的成员,我需要将这两个目标组附加到每个实例。这就是我如何配置的,连接:
// Creates the target-group
resource "aws_lb_target_group" "nlb_target_groups" {
for_each = {
for lx in var.nlb_listeners : "${lx.protocol}:${lx.target_port}" => lx
对于我们在Azure存储帐户中创建的每个新fileshare,我们都会得到一个connect选项
,
如果我们单击connect我们将获得以下选项
是否可以通过terraform,获取这段代码来装载此文件共享?我到处都找不到。在此方面的任何帮助都将不胜感激当然,这是可能的。您只需要将代码复制到脚本中,然后使用VM扩展在VM内执行。一点也不复杂。这是一个例子
但是有一件事需要注意,VM扩展只支持非交互式脚本。例如,Linux的connect代码,命令sudo是一个交互式命令,因此不建议在VM扩展
我目前正在使用一个Kubernetes集群,它运行在由Ansible配置的裸机节点上。有计划转移到云端,我正在阅读关于Terraform和Packer的文章,为这篇文章做准备。撇开数据迁移不谈,我们似乎有一条非常直接的迁移路径:
使用我们现有的Ansible脚本使用Packer构建图像
使用Terraform将构建的映像部署到云
使用当前工具部署Kubernetes资源
太好了。我们现在有了不变的基础设施,使用了最先进的工具
我正在努力寻找的是如何对使用Packer构建的图像进行版本控制。接下来
我试图弄清楚Terraform Cloud,只是想知道如何在我的文件中访问我在工作区中设置的环境变量
// main.tf
// Configure the Google Cloud provider
provider "google" {
credentials = "GOOGLE_CREDENTIALS"
project = "my-project"
region = "australia-
标签: Terraform
azure-keyvaultazure-appserviceazure-rm
我的地形设计依赖于一个预设置的密钥库,其中包含应用程序服务使用的秘密。我已将此密钥库导入远程状态。我看它是进口的。现在,当我运行terraform plan时,它的行为就像它不知道导入的资源一样
这就是我的地形的样子
provider "azurerm" {
version="=2.20.0"
skip_provider_registration="true"
features{}
}
terraform
我知道我需要在.terraformrc文件中定义terraform云凭据,如下所述:
有没有办法不使用.terraformrc文件并在环境变量中设置凭据和令牌
附言:
只是一个附带的问题,我们有Terraform Enterprise或Cloud的StackOverflow标签吗?答案是肯定和否定的
如果问题是使用环境变量验证TFE提供程序,那么答案是肯定的。该更改是为了启用TFE_令牌和TFE_主机名来验证TFE提供程序,作为Terraform CLI配置文件的替代方案。然后,您可以与该提
项目使用远程S3地形状态。我想添加一个.terraform版本文件,以便tfenv可以自动切换到它。但首先我想验证当前存储在远程状态的版本。我认为这是一种方法:
terraform state pull | grep terraform_version
但正如所指出的,它不提供远程版本,只提供本地版本。是否有检索远程terraform版本的命令?您不应该使用状态拉取来获取远程版本。当命令在输出前将状态转换为本地版本时,它将为您提供本地版本
你可以查一下
注意:此命令不能用于检查的地形版本
远程
我正在尝试循环DigitalOcean Droplet中的所有实例,其中有未知数量的实例要添加到DigitalOcean项目中
类似于下面的内容,但不知道如何
resource "digitalocean_droplet" "web" {
count = var.droplet_count
name = "web-${var.name}-${var.region}-${count.index +1}"
size = &
我有一个关于在Terraform中向变量传递多个值的问题。我在任何地方都找不到答案,我也不确定这是否可能。在我们的环境中,当我们创建AWS资源(如VPC)并向其添加标记名(如项目环境VPC,如cvs生产VPC)时。当我尝试使用Terraform创建资源时,我将如何做同样的事情?我尝试了以下方法,但无效:
resource "aws_vpc" "main" {
cidr_block = var.aws_cidr
instance_
标签: Terraform
terraform-provider-awsterraform0.12+
我使用terraform创建了一个AWS Lambda函数。代码更改是从我们的CI服务器自动部署的,提交sha作为环境变量传递(GIT\u commit\u HASH)-因此这会在Terraform范围之外更改Lambda函数(因为人们在询问…)
到目前为止,这个效果很好。但是现在我想更新函数的节点版本,terraform尝试将env var重置为初始值“unknown”
我试图使用ignore_changes块,但无法让terraform忽略其他地方所做的更改
resource "a
Terraform将尝试部署Terraform配置文件中定义的所有资源。我的应用程序中有很多资源,比如lmabda、api网关、ECS等等。我想知道是否可以指定只部署一个资源。例如,我只想部署一个lambda,不想应用其他资源。如何在Terraform中实现它?Terraform应用-target=aws\u lambda\u函数。测试\u函数
有关使用-target的更多信息,请参阅
在为GKE集群部署部署相同的terraform google_容器_集群配置时,我发现两个GCP项目之间存在差异
terraform google_容器_群集配置明确禁用屏蔽节点:
resource "google_container_cluster" "csurv-cluster" {
...
enable_shielded_nodes = false
...
此terraform配置用于跨多个项目供应集群,除一个项目外,
1 2 3 4 5 6 ...
下一页 最后一页 共 38 页