Azure API 管理现在是“软删除”的,以便您可以在误删除时将其恢复。
使用已删除的名称创建 Azure API 管理会导致名称“已在使用中”错误
使用terraform destroy它时会进行软删除,这使得开发变得棘手,因为您经常想要重新创建它。
如何使用 terraform 清除软删除的 APIM?
我编写了一个 Terraform 脚本,该脚本应该从一个模板创建多个服务器实例。我现在创建了两个不同的变量文件。
但是当我运行脚本时,会使用第一个变量文件创建一个新实例,但使用第二个变量文件时,第一个实例始终会被覆盖/更改。我不知道为什么 Terraform 引用之前新创建的实例。我怎样才能防止这种情况发生?
服务器1.tfvars:
vsphere_user = "administrator@vsphere.local"
vsphere_password = "#Password"
vsphere_server = "vsphere.server"
vsphere_datacenter = "Datacenter"
vsphere_datastore = "Storage_1"
vsphere_compute_cluster = "Cluster"
vsphere_network = "Network_1"
vsphere_virtual_machine_template = "Template_Microsoft_Windows_Server_2019_x64_english"
system_name = "server-1"
system_cores = 2
system_cores_per_socket = 2
system_memory = 2048
system_local_admin_password = "#Password"
system_ipv4_address = "172.22.15.11"
system_ipv4_netmask = 24
system_dns_server_list = ["172.22.15.101"]
system_ipv4_gateway = "172.22.15.1"
system_disk1_size = 75
system_domain_admin_user = "Administrator"
system_domain_admin_password = "#Password"
Run Code Online (Sandbox Code Playgroud)
服务器2.tfvars:
vsphere_user = "administrator@vsphere.local"
vsphere_password = "#Password"
vsphere_server = "vsphere.server"
vsphere_datacenter = "Datacenter" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下 terraform 资源模块创建一个简单的 dynamodb 表。
运行 terraform 时出现以下错误: 必须对所有属性建立索引。未使用的属性:[“pactitle”“ipadress”“Timestamp”]。 为什么我们需要索引所有属性?如何解决这个问题?
resource "aws_dynamodb_table" "this" {
count = var.create_table ? 1 : 0
name = var.name
billing_mode = var.billing_mode
hash_key = var.hash_key
range_key = var.range_key
read_capacity = var.read_capacity
write_capacity = var.write_capacity
//stream_enabled = var.stream_enabled
//stream_view_type = var.stream_view_type
dynamic "attribute" {
for_each = var.attributes
content {
name = attribute.value.name
type = attribute.value.type
}
}
server_side_encryption {
enabled = var.server_side_encryption_enabled
kms_key_arn = var.server_side_encryption_kms_key_arn
}
tags = merge(
var.tags,
{
"Name" = format("%s", var.name)
}, …Run Code Online (Sandbox Code Playgroud) 我创建了一些数据块来查找合适的 AMI。我有 4 个数据块来查找基于 4 个操作系统的 4 个 AMI。例子,
data "aws_ami" "centos" {
owners = ["123456789"]
most_recent = true
filter {
name = "name"
values = ["CentOS*${var.os-version}*x86_64"]
}
}
data "aws_ami" "suse" {
owners = ["amazon"]
most_recent = true
filter {
name = "name"
values = ["suse-sles-${var.os-version}-sp*-v????????-hvm-ssd-x86_64"]
}
}
Run Code Online (Sandbox Code Playgroud)
我像下面这样称呼他们ami_id=data.${os_name}.image-id
所以我想要的是只运行已经被调用的数据块。如果用户选择“suse”,则仅运行 suse 数据块。不是所有的人。现在这是一个问题,因为用户根据操作系统选择版本。例如,16.04 仅适用于 ubuntu,不适用于其他任何版本,因此其他数据块会抛出如下异常,
Error: Your query returned no results. Please change your search criteria and try again.
on main.tf line 79, in data "aws_ami" "suse":
79: data …Run Code Online (Sandbox Code Playgroud) 我正在使用 terraform 创建 Kubernetes 命名空间。下面的示例
resource "kubernetes_namespace" "test1" {
metadata {
name = local.ns_name
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 terraform 按照此链接创建蓝/绿类型的部署。作为其中的一部分,我现在创建了两个 kubernetes 集群。一个是蓝色的,另一个是绿色的,现在我有两个 kubernetes 提供者
provider "kubernetes" {
alias = "kubernetes_blue"
}
provider "kubernetes" {
alias = "kubernetes_green"
}
Run Code Online (Sandbox Code Playgroud)
我想了解是否有一种方法,我可以有一些条件kubernetes_namespace,根据标志var.enable_green_side和var.enable_blue_side,我可以在多个 kubernetes 集群中创建相同的命名空间,而不必重复整个资源块,如下所示
resource "kubernetes_namespace" "test1" {
metadata {
name = local.ns_name
}
provider = kubernetes.kubernetes_blue
}
resource "kubernetes_namespace" "test2" {
metadata {
name = local.ns_name
}
provider = kubernetes.kubernetes_green
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我正在为 AMI 设置标签。我有 ubuntu 和 EKS AMI,其中 EKS AMI 需要设置 k8s 版本、containerd 等,其他操作系统不需要这些。我已将 EKS 特定的所有变量声明为默认为 null,假设在运行 for_each 时它们会跳过,但会出错。这是代码和错误。
locals {
tags = {
docker_version = var.docker_version
kubernetes = var.k8s_version
cni_plugin_version = var.cni_plugin_version
containerd_version = var.containerd_version
target = var.target
source_ami_id = var.source_ami_id
Release = var.ami_release-version
Description = var.ami_description
Name = var.ami_name
Creator = var.creator
}
data "aws_ami" "ami_image" {
most_recent = true
owners = ["xxxxxxxx"]
name_regex = var.ami_regex
}
output "ami_id" {
value = data.aws_ami.ami_image.id
}
output "ami_arn" {
value = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Terraform 中设置 S3 存储桶策略。我在模块中编写了以下代码core/main.tf:
resource "aws_s3_bucket_policy" "access_to_bucket" {\n\n bucket = aws_s3_bucket.some_bucket.id\n\n policy = jsonencode({\n Version = "2012-10-17"\n Statement = [\n {\n Action = ["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket"]\n Effect = "Allow"\n Principal = "${var.some_variable_name}"\n Resource = [\n "${aws_s3_bucket.some_bucket.arn}",\n "${aws_s3_bucket.some_bucket.arn}/*"\n ]\n },\n ]\n })\n}\n\nRun Code Online (Sandbox Code Playgroud)\n然后在本地模块中实例化,该模块使用 localstack 在本地运行。
\n这是生成的计划:
\nTerraform will perform the following actions:\n\n # module.local.aws_s3_bucket_policy.access_to_bucket will be created\n + resource "aws_s3_bucket_policy" "access_to_bucket" {\n + bucket = "some_bucket"\n + id = (known after apply)\n + policy …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
我正在尝试将快照计划添加到 vm_instance 的启动磁盘。
provider "google" {
project = "xxxxxx"
}
resource "google_compute_instance" "xxxxxx" {
name = "xxxxxx"
machine_type = "xxxxxx"
zone = "xxxxxx"
boot_disk {
initialize_params {
image = "???"
}
}
metadata_startup_script = ";;"
network_interface {
network = "default"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道如何将计划添加到外部磁盘: https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment
但是如何使用 vm_instance 磁盘执行此操作呢?
谢谢
我有一个文件 A,已提交到 git 中。
如果我做了terraform fmt --check --recursive .它输出A.
但是,如果我随后执行 a,git diff我会得到空白输出并且git status报告没有任何更改。
如果我再次重新运行terraform fmt --check --recursive .它输出A.
有什么建议吗?出了什么问题?
我对https://www.terraform.io/docs/cli/commands/fmt.html的理解 是,如果它更改了该文件,它只会输出文件名。
例子
resource "aws_vpc" "test_vpc" {
cidr_block = "192.168.0.0/16"
instance_tenancy = "default"
}
Run Code Online (Sandbox Code Playgroud)
问题出在这一行:instance_tenancy。在 vi 中查看它,我看不到任何奇怪的字符。
Terraform v0.15.4
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v3.37.0
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 terraform 代码创建中转网关 VPC 附件,但是,当我执行 terraform 计划时出现以下错误;\nterraform 版本为 0.12
\n错误:-
\n\xe2\x94\x82 Error: Inconsistent conditional result types\n\xe2\x94\x82\n\xe2\x94\x82 on vpn-dynamic\\main.tf line 67, in resource "aws_ec2_transit_gateway_vpc_attachment" "tgw_vpc_attachment":\n\xe2\x94\x82 67: subnet_ids = lower(var.transit_gateway) == "enabled" ? var.tgw_subnet_ids : 0\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 \xe2\x94\x82 var.tgw_subnet_ids is a list of string, known only after apply\n\xe2\x94\x82 \xe2\x94\x82 var.transit_gateway is a string, known only after apply\n\xe2\x94\x82\n\xe2\x94\x82 The true and false result expressions must have consistent types. The given expressions are list of \n\xe2\x94\x82 string and number, respectively.\nRun Code Online (Sandbox Code Playgroud)\nmain.tf:- …
terraform ×10
amazon-s3 ×1
azure ×1
disk ×1
kubernetes ×1
terraform-provider-kubernetes ×1
vsphere ×1