[英]Terraform Output via Jenkins
I'm unable to find vpc_id
and public_su.net.0
in a terraform my-vpc output.我无法在 terraform my-vpc output 中找到
vpc_id
和public_su.net.0
。
Every single time when I put below command:每次我发出以下命令时:
ansible-playbook playbook1.yml -e "vpc_id=$(terraform output my-vpc.vpc_id) vpc_subnet_id=$(terraform output my-vpc.public_subnets.0)" -vvv
But it print terraform output my-vpc但它打印 terraform output my-vpc
-bash-4.2$ terraform output my-vpc
{
"azs" = tolist([
"eu-west-1a",
"eu-west-1b",
"eu-west-1c",
])
"cgw_arns" = []
"cgw_ids" = []
"database_internet_gateway_route_id" = ""
"database_ipv6_egress_route_id" = ""
"database_nat_gateway_route_ids" = []
"database_network_acl_arn" = ""
"database_network_acl_id" = ""
"database_route_table_association_ids" = [
"rtbassoc-0c0a897cce6cbac74",
"rtbassoc-02c2f605eb9988418",
"rtbassoc-0b14ef189c6c39da5",
]
"database_route_table_ids" = [
"rtb-038a86ea7eef50de1",
]
"database_subnet_arns" = [
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-0ef73bc4e91557920",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-0f044d3b21cecbca6",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-042312717d7ed4fe6",
]
"database_subnet_group" = "my-vpc"
"database_subnet_group_name" = "my-vpc"
"database_subnets" = [
"subnet-0ef73bc4e91557920",
"subnet-0f044d3b21cecbca6",
"subnet-042312717d7ed4fe6",
]
"database_subnets_cidr_blocks" = tolist([
"10.0.21.0/24",
"10.0.22.0/24",
"10.0.23.0/24",
])
"database_subnets_ipv6_cidr_blocks" = tolist([])
"default_network_acl_id" = "acl-08f647113ea769f4f"
"default_route_table_id" = "rtb-0b55d9919c1133316"
"default_security_group_id" = "sg-050c394121822118f"
"default_vpc_arn" = ""
"default_vpc_cidr_block" = ""
"default_vpc_default_network_acl_id" = ""
"default_vpc_default_route_table_id" = ""
"default_vpc_default_security_group_id" = ""
"default_vpc_enable_dns_hostnames" = ""
"default_vpc_enable_dns_support" = ""
"default_vpc_id" = ""
"default_vpc_instance_tenancy" = ""
"default_vpc_main_route_table_id" = ""
"dhcp_options_id" = ""
"egress_only_internet_gateway_id" = ""
"elasticache_network_acl_arn" = ""
"elasticache_network_acl_id" = ""
"elasticache_route_table_association_ids" = []
"elasticache_route_table_ids" = [
"rtb-0bbad3836a81d51cd",
]
"elasticache_subnet_arns" = []
"elasticache_subnet_group" = ""
"elasticache_subnet_group_name" = ""
"elasticache_subnets" = []
"elasticache_subnets_cidr_blocks" = tolist([])
"elasticache_subnets_ipv6_cidr_blocks" = tolist([])
"igw_arn" = "arn:aws:ec2:eu-west-1:008421212484:internet-gateway/igw-006457c32d869d138"
"igw_id" = "igw-006457c32d869d138"
"intra_network_acl_arn" = ""
"intra_network_acl_id" = ""
"intra_route_table_association_ids" = []
"intra_route_table_ids" = []
"intra_subnet_arns" = []
"intra_subnets" = []
"intra_subnets_cidr_blocks" = tolist([])
"intra_subnets_ipv6_cidr_blocks" = tolist([])
"name" = "my-vpc"
"nat_ids" = [
"eipalloc-0a8b17a3d8101a5a0",
]
"nat_public_ips" = tolist([
"18.200.43.46",
])
"natgw_ids" = [
"nat-0c1f640cfa6bc1b9c",
]
"outpost_network_acl_arn" = ""
"outpost_network_acl_id" = ""
"outpost_subnet_arns" = []
"outpost_subnets" = []
"outpost_subnets_cidr_blocks" = tolist([])
"outpost_subnets_ipv6_cidr_blocks" = tolist([])
"private_ipv6_egress_route_ids" = []
"private_nat_gateway_route_ids" = [
"r-rtb-0bbad3836a81d51cd1080289494",
]
"private_network_acl_arn" = ""
"private_network_acl_id" = ""
"private_route_table_association_ids" = [
"rtbassoc-046f37259950a7f95",
"rtbassoc-0be769cfe2ebd6034",
"rtbassoc-03dab517c9aa2789c",
]
"private_route_table_ids" = [
"rtb-0bbad3836a81d51cd",
]
"private_subnet_arns" = [
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-038ffd52b102ad03d",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-07fff3a676d8792b7",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-09d7264428c109220",
]
"private_subnets" = [
"subnet-038ffd52b102ad03d",
"subnet-07fff3a676d8792b7",
"subnet-09d7264428c109220",
]
"private_subnets_cidr_blocks" = tolist([
"10.0.11.0/24",
"10.0.12.0/24",
"10.0.13.0/24",
])
"private_subnets_ipv6_cidr_blocks" = tolist([])
"public_internet_gateway_ipv6_route_id" = ""
"public_internet_gateway_route_id" = "r-rtb-095c4a905b733cb521080289494"
"public_network_acl_arn" = ""
"public_network_acl_id" = ""
"public_route_table_association_ids" = [
"rtbassoc-08b42ea2c1b00f82c",
"rtbassoc-06d913cc918b08721",
"rtbassoc-04437e6c3b6deea45",
]
"public_route_table_ids" = [
"rtb-095c4a905b733cb52",
]
"public_subnet_arns" = [
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-08dbadd83e2dfea89",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-07b49f530d35a3899",
"arn:aws:ec2:eu-west-1:008421212484:subnet/subnet-057153ea6183d363f",
]
"public_subnets" = [
"subnet-08dbadd83e2dfea89",
"subnet-07b49f530d35a3899",
"subnet-057153ea6183d363f",
]
"public_subnets_cidr_blocks" = tolist([
"10.0.1.0/24",
"10.0.2.0/24",
"10.0.3.0/24",
])
"public_subnets_ipv6_cidr_blocks" = tolist([])
"redshift_network_acl_arn" = ""
"redshift_network_acl_id" = ""
"redshift_public_route_table_association_ids" = []
"redshift_route_table_association_ids" = []
"redshift_route_table_ids" = tolist([
"rtb-0bbad3836a81d51cd",
])
"redshift_subnet_arns" = []
"redshift_subnet_group" = ""
"redshift_subnets" = []
"redshift_subnets_cidr_blocks" = tolist([])
"redshift_subnets_ipv6_cidr_blocks" = tolist([])
"this_customer_gateway" = {}
"vgw_arn" = ""
"vgw_id" = ""
"vpc_arn" = "arn:aws:ec2:eu-west-1:008421212484:vpc/vpc-081b13e816e14214c"
"vpc_cidr_block" = "10.0.0.0/16"
"vpc_enable_dns_hostnames" = true
"vpc_enable_dns_support" = true
"vpc_flow_log_cloudwatch_iam_role_arn" = ""
"vpc_flow_log_destination_arn" = ""
"vpc_flow_log_destination_type" = "cloud-watch-logs"
"vpc_flow_log_id" = ""
"vpc_id" = "vpc-081b13e816e14214c"
"vpc_instance_tenancy" = "default"
"vpc_ipv6_association_id" = ""
"vpc_ipv6_cidr_block" = ""
"vpc_main_route_table_id" = "rtb-0b55d9919c1133316"
"vpc_owner_id" = "008421212484"
"vpc_secondary_cidr_blocks" = tolist([])
}
I was trying with: Differen naming and paths.我正在尝试:不同的命名和路径。 Jenkins user privileges.
Jenkins 用户权限。 Destination of output.
output 的目的地。
Outputs are meant to be human-readable:输出应该是人类可读的:
The
terraform output
command by default displays in a human-readable format, which can change over time to improve clarity.terraform output
命令默认以人类可读的格式显示,可以随时间变化以提高清晰度。
That means it's not really easy to get the values using the usual terraform syntax and you would need to use a tool like jq
[1].这意味着使用通常的 terraform 语法获取值并不容易,您需要使用像
jq
[1] 这样的工具。 So in your example, that would have to be something like:所以在你的例子中,那必须是这样的:
VPC_ID=$(terraform output -json my-vpc | jq -r '.vpc_id')
VPC_SUBNET_ID=$(terraform output -json my-vpc | jq -r '.public_subnets[0]')
Followed by:其次是:
ansible-playbook playbook1.yml -e vpc_id=$VPC_ID -e vpc_subnet_id=$VPC_SUBNET_ID -vvv
My Ansible skills are a bit rusty, and there might be better ways of doing it, but this should get you started.我的 Ansible 技能有点生疏,可能有更好的方法,但这应该可以帮助您入门。
[1] https://developer.hashicorp.com/terraform/cli/commands/output#use-in-automation [1] https://developer.hashicorp.com/terraform/cli/commands/output#use-in-automation
Thaks to support of my coleuge we found a solution: jq;)感谢支持我的学院,我们找到了解决方案:jq;)
ansible-playbook playbook1.yml -e "vpc_id=$(terraform output -json my-vpc|jq -r .vpc_id) vpc_subnet_id=$(terraform output -json my-vpc|jq -r .public_subnets[0])" -vvv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.