消耗地形状态并生成可转移库存。

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

许可证

麻省理工学院

作者信息

小拉里·史密斯

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
缺少java MIMessage附件   java试图从JSON数组向数据库插入数据   铸造java。util。ArrayList无法转换为java。util。矢量   在到达末尾后从头开始读取csv文件(Java、OpenCSV)   Java swing如何在另一个线程中打开框架   java如何为集合正确编写此比较器。排序(arrayList、comparator)?   JavaOOD将配置传递给外部类的最佳方式   java不确定如何使用switch语句从main()调用要运行的方法   java循环菜单以在选择后显示   java将位置对象转换为地址(谷歌地图)   java Hazel cast客户端端口问题   使用JarJar重新打包工具的java   使用Java Netscape目录LDAP API和二进制筛选器值   java如何从Google App Engine下载应用程序源文件   java如何居中javafx场景图“摄影机”   java调用servlet而不提交并停留在同一个JSP页面中   将文本文件加载到HashMap<Integer,List<String>>java中   JavaFX平台。重新加载站点后运行更高版本()