消耗地形状态并生成可转移库存。
TerraformToAnsibleInventor的Python项目详细描述
python terraform到ansible inventory
这个包是用来消费Terraform State, 分析数据,然后生成一个功能性的可扩展清单 然后被安西伯吃掉。
ansible群
但是,默认情况下,所有vm都被放入ansible组terraform_vms
您还可以通过利用vm上的标记来定义其他ansible组。
资源。默认情况下,当前将查找tags.ansible_groups
可在资源上定义如下:
NOTE: Currently only limited testing on AWS, Azure, and vSphere resources.
tags{ansible_groups="['test', 'cluster']"}
安装
手动
您可以通过执行以下操作手动安装此软件包:
python setup.py install
使用pip
也可以使用pip
:
pip install TerraformToAnsibleInventory
安装后,您可以在 终端会话。
TerraformToAnsibleInventory -t terraform.tfstate.vsphere -i terraform_inventory.yml
支持的Terraform后端
当前支持使用以下后端。
- 本地-从中执行的本地
terraform.tfstate
文件。 - consul—存储地形状态的consul环境。
执行
您可以查看帮助以熟悉可供使用的选项 通过执行:
TerraformToAnsibleInventory --help ... usage: TerraformToAnsibleInventory [-h][-b {local,consul}][-cH CONSULHOST][-cKV CONSULKV][-cP CONSULPORT][-cS {http,https}][-i INVENTORY][-t TFSTATE] optional arguments: -h, --help show this help message and exit -b {local,consul}, --backend {local,consul} Define which Terraform backend to parse -cH CONSULHOST, --consulHost CONSULHOST Define Consul host when using Consul backend -cKV CONSULKV, --consulKV CONSULKV Define Consul KV Pair to query. Ex. Azure/Test -cP CONSULPORT, --consulPort CONSULPORT Define Consul host port -cS {http,https}, --consulScheme {http,https} Define Consul connection scheme. -i INVENTORY, --inventory INVENTORY Ansible inventory -t TFSTATE, --tfstate TFSTATE Terraform tftstate file
使用本地后端
TerraformToAnsibleInventory -t terraform.tfstate -i terraform_inventory.yml
使用consul后端
TerraformToAnsibleInventory -b consul -cH consul.example.org -cKV Azure/Test -i terraform_inventory.yml
库存示例
aws
aws_elb:hosts:web-elb:{}aws_instance:hosts:i-03676fa6ba43fbb9f:{}i-09f51a313146856cd:{}terraform_load_balancers:hosts:web-elb:access_logs:[]availability_zones:-us-east-1aconnection_draining:trueconnection_draining_timeout:'400'cross_zone_load_balancing:truedns_name:web-elb-1019323532.us-east-1.elb.amazonaws.comhealth_checks:-healthy_threshold:'2'interval:'30'target:HTTP:80/timeout:'5'unhealthy_threshold:'2'idle_timeout:'400'instances:-i-03676fa6ba43fbb9f-i-09f51a313146856cdinternal:truelisteners:-instance_port:'80'instance_protocol:httplb_port:'80'lb_protocol:httpname:web-elbsecurity_groups:-sg-74c46809subnets:-subnet-690a0942tags:Environment:productionName:web-elbtype:aws_elbzone_id:Z35SXDOTRQ7X7Kterraform_vms:hosts:i-03676fa6ba43fbb9f:ami:ami-b73b63a0ansible_groups:[]availability_zone:us-east-1adata_type:aws_instanceinstance_type:t2.microinventory_hostname:i-03676fa6ba43fbb9fkey_name:aws-us-eastnetwork_interface_id:eni-947bbf62private_dns:ip-172-31-50-15.ec2.internalprivate_ip:172.31.50.15public_dns:ec2-34-207-194-186.compute-1.amazonaws.compublic_ip:34.207.194.186subnet_id:subnet-690a0942vpc_security_group_ids:-sg-5a677425vpc_security_groups:-description:Security group for web productionegress_rules:-cidr_blocks:[]from_port:'0'protocol:'-1'self:'false'to_port:'0'-cidr_blocks:-0.0.0.0/0from_port:'0'protocol:'-1'self:'false'to_port:'0'id:sg-5a677425ingress_rules:-cidr_blocks:[]from_port:'80'protocol:tcpself:'false'to_port:'80'-cidr_blocks:-0.0.0.0/0from_port:'22'protocol:tcpself:'false'to_port:'22'-cidr_blocks:[]from_port:'22'protocol:tcpself:'false'to_port:'22'-cidr_blocks:-0.0.0.0/0from_port:'80'protocol:tcpself:'false'to_port:'80'name:web-production-sgi-09f51a313146856cd:ami:ami-b73b63a0ansible_groups:[]availability_zone:us-east-1adata_type:aws_instanceinstance_type:t2.microinventory_hostname:i-09f51a313146856cdkey_name:aws-us-eastnetwork_interface_id:eni-0679bdf0private_dns:ip-172-31-63-104.ec2.internalprivate_ip:172.31.63.104public_dns:ec2-34-203-236-205.compute-1.amazonaws.compublic_ip:34.203.236.205subnet_id:subnet-690a0942vpc_security_group_ids:-sg-5a677425vpc_security_groups:-description:Security group for web productionegress_rules:-cidr_blocks:[]from_port:'0'protocol:'-1'self:'false'to_port:'0'-cidr_blocks:-0.0.0.0/0from_port:'0'protocol:'-1'self:'false'to_port:'0'id:sg-5a677425ingress_rules:-cidr_blocks:[]from_port:'80'protocol:tcpself:'false'to_port:'80'-cidr_blocks:-0.0.0.0/0from_port:'22'protocol:tcpself:'false'to_port:'22'-cidr_blocks:[]from_port:'22'protocol:tcpself:'false'to_port:'22'-cidr_blocks:-0.0.0.0/0from_port:'80'protocol:tcpself:'false'to_port:'80'name:web-production-sg
蔚蓝
azurerm_lb:hosts:TestLoadBalancer:{}azurerm_virtual_machine:hosts:Jumphost:{}acctvm0:{}acctvm1:{}acctvm2:{}consul_cluster:hosts:acctvm0:{}acctvm1:{}acctvm2:{}jumphosts:hosts:Jumphost:{}terraform_load_balancers:hosts:TestLoadBalancer:location:eastusname:TestLoadBalancerprivate_ip_address:''public_ip_address:40.121.70.170resource_group_name:acctestrgsku:Basictype:azurerm_lbterraform_vms:hosts:Jumphost:ansible_groups:-jumphosts-testansible_host:10.0.2.5data_type:azurerm_virtual_machineinventory_hostname:Jumphostlocation:eastusmac_address:00-0D-3A-4E-59-66private_ips:-10.0.2.5public_ips:-104.211.58.178resource_group_name:acctestrgsecurity_groups:-name:JumphostSecurityGroup1rules:-access:Denydescription:''destination_address_prefix:'*'destination_port_range:'*'direction:Inboundname:DenyAllpriority:'1000'protocol:'*'source_address_prefix:'*'source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'22'direction:Inboundname:AllowTcp22InboundFromHomeNetworkpriority:'100'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'target:azurerm_virtual_machine.Jumphostvm_size:Standard_B1sacctvm0:ansible_groups:-test-consul_clusteransible_host:10.0.2.6data_type:azurerm_virtual_machineinventory_hostname:acctvm0location:eastusmac_address:00-0D-3A-4D-99-E5private_ips:-10.0.2.6public_ips:[]resource_group_name:acctestrgsecurity_groups:-name:TestSecurityGroup1rules:-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcp8500InboundHomeNetworkpriority:'200'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Denydescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:DenyTcp8500Inboundpriority:'202'protocol:Tcpsource_address_prefix:'*'source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'22'direction:Inboundname:AllowTcp22InboundFromHomeNetworkpriority:'100'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcpInboundLbProbepriority:'201'protocol:Tcpsource_address_prefix:168.63.129.16/32source_port_range:'*'target:azurerm_virtual_machine.acctvm0vm_size:Standard_B1sacctvm1:ansible_groups:-test-consul_clusteransible_host:10.0.2.4data_type:azurerm_virtual_machineinventory_hostname:acctvm1location:eastusmac_address:00-0D-3A-4D-CA-DCprivate_ips:-10.0.2.4public_ips:[]resource_group_name:acctestrgsecurity_groups:-name:TestSecurityGroup1rules:-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcp8500InboundHomeNetworkpriority:'200'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Denydescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:DenyTcp8500Inboundpriority:'202'protocol:Tcpsource_address_prefix:'*'source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'22'direction:Inboundname:AllowTcp22InboundFromHomeNetworkpriority:'100'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcpInboundLbProbepriority:'201'protocol:Tcpsource_address_prefix:168.63.129.16/32source_port_range:'*'target:azurerm_virtual_machine.acctvm1vm_size:Standard_B1sacctvm2:ansible_groups:-test-consul_clusteransible_host:10.0.2.7data_type:azurerm_virtual_machineinventory_hostname:acctvm2location:eastusmac_address:00-0D-3A-4E-54-5Fprivate_ips:-10.0.2.7public_ips:[]resource_group_name:acctestrgsecurity_groups:-name:TestSecurityGroup1rules:-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcp8500InboundHomeNetworkpriority:'200'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Denydescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:DenyTcp8500Inboundpriority:'202'protocol:Tcpsource_address_prefix:'*'source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'22'direction:Inboundname:AllowTcp22InboundFromHomeNetworkpriority:'100'protocol:Tcpsource_address_prefix:66.73.197.182/32source_port_range:'*'-access:Allowdescription:''destination_address_prefix:'*'destination_port_range:'8500'direction:Inboundname:AllowTcpInboundLbProbepriority:'201'protocol:Tcpsource_address_prefix:168.63.129.16/32source_port_range:'*'target:azurerm_virtual_machine.acctvm2vm_size:Standard_B1stest:hosts:Jumphost:{}acctvm0:{}acctvm1:{}acctvm2:{}
vSphere
terraform_load_balancers:hosts:{}terraform_vms:hosts:docker-lb-01.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.163data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_lbs/docker-lb-01.lab.etsbv.internalinventory_hostname:docker-lb-01.lab.etsbv.internalmac_address:00:50:56:aa:9c:b3memory:'512'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-lb-01.lab.etsbv.internaluuid:422a4adb-e7d3-ea74-a69a-3ff10c13063fvcpu:'1'docker-lb-02.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.160data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_lbs/docker-lb-02.lab.etsbv.internalinventory_hostname:docker-lb-02.lab.etsbv.internalmac_address:00:50:56:aa:f8:25memory:'512'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-lb-02.lab.etsbv.internaluuid:422adcf8-347a-e9a5-e113-00114c1d2de9vcpu:'1'docker-mgr-01.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.171data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-01.lab.etsbv.internalinventory_hostname:docker-mgr-01.lab.etsbv.internalmac_address:00:50:56:aa:a9:c0memory:'1024'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-mgr-01.lab.etsbv.internaluuid:422abe05-4483-88f8-34b7-e354fdc7a211vcpu:'1'docker-mgr-02.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.166data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-02.lab.etsbv.internalinventory_hostname:docker-mgr-02.lab.etsbv.internalmac_address:00:50:56:aa:ba:a0memory:'1024'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-mgr-02.lab.etsbv.internaluuid:422a5d74-4de2-1df8-646b-ca62311f98abvcpu:'1'docker-mgr-03.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.179data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-03.lab.etsbv.internalinventory_hostname:docker-mgr-03.lab.etsbv.internalmac_address:00:50:56:aa:e3:06memory:'1024'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-mgr-03.lab.etsbv.internaluuid:422a8d34-68f7-a7be-9c6a-18949ce809edvcpu:'1'docker-storage-01.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.162data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_storage/docker-storage-01.lab.etsbv.internalinventory_hostname:docker-storage-01.lab.etsbv.internalmac_address:00:50:56:aa:5f:cbmemory:'512'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-storage-01.lab.etsbv.internaluuid:422a264a-0816-60ff-475c-23af6c0b9d0evcpu:'1'docker-storage-02.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.178data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_storage/docker-storage-02.lab.etsbv.internalinventory_hostname:docker-storage-02.lab.etsbv.internalmac_address:00:50:56:aa:01:a0memory:'512'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-storage-02.lab.etsbv.internaluuid:422ad693-162f-1c32-b90c-eee1b0a73d2bvcpu:'1'docker-wrk-01.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.155data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-01.lab.etsbv.internalinventory_hostname:docker-wrk-01.lab.etsbv.internalmac_address:00:50:56:aa:e4:93memory:'4096'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-wrk-01.lab.etsbv.internaluuid:422a87fe-baa2-75d6-e666-36c15f351269vcpu:'1'docker-wrk-02.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.201data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-02.lab.etsbv.internalinventory_hostname:docker-wrk-02.lab.etsbv.internalmac_address:00:50:56:aa:e0:36memory:'4096'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-wrk-02.lab.etsbv.internaluuid:422a49e3-746c-b550-189c-0e0179c60418vcpu:'1'docker-wrk-03.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.207data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-03.lab.etsbv.internalinventory_hostname:docker-wrk-03.lab.etsbv.internalmac_address:00:50:56:aa:6b:d5memory:'4096'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-wrk-03.lab.etsbv.internaluuid:422a809a-0cd2-cd84-756b-0822bc3f813avcpu:'1'docker-wrk-04.lab.etsbv.internal:ansible_groups:[]ansible_host:10.0.102.183data_type:vsphere_virtual_machineid:Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-04.lab.etsbv.internalinventory_hostname:docker-wrk-04.lab.etsbv.internalmac_address:00:50:56:aa:b5:43memory:'4096'network_label:VSS-VLAN-102target:vsphere_virtual_machine.docker-wrk-04.lab.etsbv.internaluuid:422aae57-67e8-50d8-66f6-3a11bdc87a78vcpu:'1'vsphere_virtual_machine:hosts:docker-lb-01.lab.etsbv.internal:{}docker-lb-02.lab.etsbv.internal:{}docker-mgr-01.lab.etsbv.internal:{}docker-mgr-02.lab.etsbv.internal:{}docker-mgr-03.lab.etsbv.internal:{}docker-storage-01.lab.etsbv.internal:{}docker-storage-02.lab.etsbv.internal:{}docker-wrk-01.lab.etsbv.internal:{}docker-wrk-02.lab.etsbv.internal:{}docker-wrk-03.lab.etsbv.internal:{}docker-wrk-04.lab.etsbv.internal:{}
混合
terraform_vms:hosts:Jumphost:ansible_host:10.0.2.6data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.6public_ips:-40.117.254.203resource_group_name:acctestrgvm_size:Standard_B1sacctvm0:ansible_host:10.0.2.6data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.6public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1sacctvm1:ansible_host:10.0.2.6data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.6public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1sacctvm2:ansible_host:10.0.2.6data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.6public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1sdocker-lb-01.lab.etsbv.internal:ansible_host:10.0.102.163data_type:vsphere_virtual_machinemac_address:00:50:56:aa:9c:b3memory:512network_label:VSS-VLAN-102uuid:422a4adb-e7d3-ea74-a69a-3ff10c13063fvcpu:1docker-lb-02.lab.etsbv.internal:ansible_host:10.0.102.160data_type:vsphere_virtual_machinemac_address:00:50:56:aa:f8:25memory:512network_label:VSS-VLAN-102uuid:422adcf8-347a-e9a5-e113-00114c1d2de9vcpu:1docker-mgr-01.lab.etsbv.internal:ansible_host:10.0.102.171data_type:vsphere_virtual_machinemac_address:00:50:56:aa:a9:c0memory:1024network_label:VSS-VLAN-102uuid:422abe05-4483-88f8-34b7-e354fdc7a211vcpu:1docker-mgr-02.lab.etsbv.internal:ansible_host:10.0.102.166data_type:vsphere_virtual_machinemac_address:00:50:56:aa:ba:a0memory:1024network_label:VSS-VLAN-102uuid:422a5d74-4de2-1df8-646b-ca62311f98abvcpu:1docker-mgr-03.lab.etsbv.internal:ansible_host:10.0.102.179data_type:vsphere_virtual_machinemac_address:00:50:56:aa:e3:06memory:1024network_label:VSS-VLAN-102uuid:422a8d34-68f7-a7be-9c6a-18949ce809edvcpu:1docker-storage-01.lab.etsbv.internal:ansible_host:10.0.102.162data_type:vsphere_virtual_machinemac_address:00:50:56:aa:5f:cbmemory:512network_label:VSS-VLAN-102uuid:422a264a-0816-60ff-475c-23af6c0b9d0evcpu:1docker-storage-02.lab.etsbv.internal:ansible_host:10.0.102.178data_type:vsphere_virtual_machinemac_address:00:50:56:aa:01:a0memory:512network_label:VSS-VLAN-102uuid:422ad693-162f-1c32-b90c-eee1b0a73d2bvcpu:1docker-wrk-01.lab.etsbv.internal:ansible_host:10.0.102.155data_type:vsphere_virtual_machinemac_address:00:50:56:aa:e4:93memory:4096network_label:VSS-VLAN-102uuid:422a87fe-baa2-75d6-e666-36c15f351269vcpu:1docker-wrk-02.lab.etsbv.internal:ansible_host:10.0.102.201data_type:vsphere_virtual_machinemac_address:00:50:56:aa:e0:36memory:4096network_label:VSS-VLAN-102uuid:422a49e3-746c-b550-189c-0e0179c60418vcpu:1docker-wrk-03.lab.etsbv.internal:ansible_host:10.0.102.207data_type:vsphere_virtual_machinemac_address:00:50:56:aa:6b:d5memory:4096network_label:VSS-VLAN-102uuid:422a809a-0cd2-cd84-756b-0822bc3f813avcpu:1docker-wrk-04.lab.etsbv.internal:ansible_host:10.0.102.183data_type:vsphere_virtual_machinemac_address:00:50:56:aa:b5:43memory:4096network_label:VSS-VLAN-102uuid:422aae57-67e8-50d8-66f6-3a11bdc87a78vcpu:1vars:terraform_load_balancers:-location:eastusname:TestLoadBalancerpublic_ip_address:40.76.73.163sku:Basictype:azurerm_lb
azure对ansible组使用标记
cluster:hosts:acctvm0:{}acctvm1:{}acctvm2:{}jumphosts:hosts:Jumphost:{}terraform_vms:hosts:Jumphost:ansible_host:10.0.2.4data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.4public_ips:-40.117.254.203resource_group_name:acctestrgvm_size:Standard_B1sacctvm0:ansible_host:10.0.2.6data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.6public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1sacctvm1:ansible_host:10.0.2.7data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.7public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1sacctvm2:ansible_host:10.0.2.5data_type:azurerm_virtual_machinelocation:eastusprivate_ips:-10.0.2.5public_ips:[]resource_group_name:acctestrgvm_size:Standard_B1svars:terraform_load_balancers:-location:eastusname:TestLoadBalancerpublic_ip_address:40.76.73.163sku:Basictype:azurerm_lbtest:hosts:Jumphost:{}acctvm0:{}acctvm1:{}acctvm2:{}
按数据类型创建的组
还可以使用这些组对特定类型执行ansible。
NOTE: Snippet below excludes all of the additional groups that are created to keep example clean.
aws_instance:hosts:ubuntu_zesty:{}azurerm_virtual_machine:hosts:Jumphost:{}acctvm0:{}acctvm1:{}acctvm2:{}vsphere_virtual_machine:hosts:docker-lb-01.lab.etsbv.internal:{}docker-lb-02.lab.etsbv.internal:{}docker-mgr-01.lab.etsbv.internal:{}docker-mgr-02.lab.etsbv.internal:{}docker-mgr-03.lab.etsbv.internal:{}docker-storage-01.lab.etsbv.internal:{}docker-storage-02.lab.etsbv.internal:{}docker-wrk-01.lab.etsbv.internal:{}docker-wrk-02.lab.etsbv.internal:{}docker-wrk-03.lab.etsbv.internal:{}docker-wrk-04.lab.etsbv.internal:{}
ansible terraform模块的用法
当使用terraform ansible模块时,您可以指定
target
可以是单个目标或目标列表。尤其是
当您的基础结构已配置并且您希望
摧毁目标。我们现在将实际的terraform目标添加为名为
target
如下例所示:
terraform_vms:hosts:acctvm0:ansible_groups:-test-consul_clusteransible_host:10.0.2.4data_type:azurerm_virtual_machineinventory_hostname:acctvm0location:eastusprivate_ips:-10.0.2.4public_ips:[]resource_group_name:acctestrgtarget:azurerm_virtual_machine.acctvm0vm_size:Standard_B1sacctvm1:ansible_groups:-test-consul_clusteransible_host:10.0.2.7data_type:azurerm_virtual_machineinventory_hostname:acctvm1location:eastusprivate_ips:-10.0.2.7public_ips:[]resource_group_name:acctestrgtarget:azurerm_virtual_machine.acctvm1vm_size:Standard_B1s
现在如果您想利用terraform ansible模块 如下图所示,瞄准我们可以这样做的资源:
playbook.yml
:
----hosts:localhostgather_facts:falsebecome:falsevars:scripts_dir:../../scriptsterraform_destroy:falseterraform_destroy_vms:[]terraform_project_path:../../Terraformtasks:-name:Execute Terraform (Provision)terraform:project_path:"{{terraform_project_path}}"state:presentregister:_terraform_execution_provisionwhen:not terraform_destroy-name:Execute Terraform (Destroy VMs Only)terraform:project_path:"{{terraform_project_path}}"state:absenttargets:"{{terraform_destroy_vms|map('extract',hostvars,['target'])|join(',')}}"register:_terraform_execution_destroywhen:>terraform_destroy_vms != [] andterraform_destroy
剧本执行:
首先以检查模式运行,以确保结果与预期一致。
ansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars "{'terraform_destroy': true,'terraform_destroy_vms': ['acctvm0', 'acctvm1']}" --check ... TASK [Terraform Results (Destroy VMs Only)] **************************************************************************************************************************************************************************************************************************************************************************** ok: [localhost]=> {"_terraform_execution_destroy": {"changed": false, "command": "/usr/local/bin/terraform destroy -no-color -force -lock=true -target azurerm_virtual_machine.acctvm0 -target azurerm_virtual_machine.acctvm1", "failed": false, "outputs": {}, "state": "absent", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}}
现在在检查模式下验证后正常运行。
ansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars "{'terraform_destroy': true,'terraform_destroy_vms': ['acctvm0', 'acctvm1']}"
如果要销毁Ansible组中的所有虚拟机:
ansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars "{'terraform_destroy': true,'terraform_destroy_vms': '{{ groups.consul_cluster }}'}" --check
许可证
麻省理工学院
作者信息
小拉里·史密斯