{ "info": { "author": "Larry Smith Jr.", "author_email": "mrlesmithjr@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2" ], "description": "# python-terraform-to-ansible-inventory\n\nThis package is for consuming [Terraform State](https://www.terraform.io/docs/state/),\nparsing the data, and then generating a functional Ansible inventory which can\nthen be consumed by Ansible.\n\n## Ansible Groups\n\nBy default all VMs are placed into the Ansible group `terraform_vms`, however\nyou can also define additional Ansible groups by leveraging tags on your VM\nresources. By default this will currently look for `tags.ansible_groups` which\ncan be defined on a resource as below:\n\n> NOTE: Currently only limited testing on AWS, Azure, and vSphere resources.\n\n```json\ntags {\n ansible_groups = \"['test', 'cluster']\"\n}\n```\n\n## Installation\n\n### Manual\n\nYou can manually install this package by executing the following:\n\n```bash\npython setup.py install\n```\n\n### Using pip\n\nYou can also install using `pip`:\n\n```bash\npip install TerraformToAnsibleInventory\n```\n\nAfter installation, you can then use this package from anywhere within your\nterminal session.\n\n```bash\nTerraformToAnsibleInventory -t terraform.tfstate.vsphere -i terraform_inventory.yml\n```\n\n## Supported Terraform Backends\n\nThe following backends are currently supported for consumption.\n\n- local - A local `terraform.tfstate` file present where executing from.\n- consul - A Consul environment in which Terraform state is stored.\n\n## Execution\n\nYou can view help to familiarize yourself with the options available for usage\nby executing:\n\n```bash\nTerraformToAnsibleInventory --help\n...\nusage: TerraformToAnsibleInventory [-h] [-b {local,consul}] [-cH CONSULHOST] [-cKV CONSULKV]\n [-cP CONSULPORT] [-cS {http,https}] [-i INVENTORY]\n [-t TFSTATE]\n\noptional arguments:\n -h, --help show this help message and exit\n -b {local,consul}, --backend {local,consul}\n Define which Terraform backend to parse\n -cH CONSULHOST, --consulHost CONSULHOST\n Define Consul host when using Consul backend\n -cKV CONSULKV, --consulKV CONSULKV\n Define Consul KV Pair to query. Ex. Azure/Test\n -cP CONSULPORT, --consulPort CONSULPORT\n Define Consul host port\n -cS {http,https}, --consulScheme {http,https}\n Define Consul connection scheme.\n -i INVENTORY, --inventory INVENTORY\n Ansible inventory\n -t TFSTATE, --tfstate TFSTATE\n Terraform tftstate file\n```\n\n### Using A Local Backend\n\n```bash\nTerraformToAnsibleInventory -t terraform.tfstate -i terraform_inventory.yml\n```\n\n### Using A Consul Backend\n\n```bash\nTerraformToAnsibleInventory -b consul -cH consul.example.org -cKV Azure/Test -i terraform_inventory.yml\n```\n\n## Example Inventories\n\n### AWS\n\n```yaml\naws_elb:\n hosts:\n web-elb: {}\naws_instance:\n hosts:\n i-03676fa6ba43fbb9f: {}\n i-09f51a313146856cd: {}\nterraform_load_balancers:\n hosts:\n web-elb:\n access_logs: []\n availability_zones:\n - us-east-1a\n connection_draining: true\n connection_draining_timeout: '400'\n cross_zone_load_balancing: true\n dns_name: web-elb-1019323532.us-east-1.elb.amazonaws.com\n health_checks:\n - healthy_threshold: '2'\n interval: '30'\n target: HTTP:80/\n timeout: '5'\n unhealthy_threshold: '2'\n idle_timeout: '400'\n instances:\n - i-03676fa6ba43fbb9f\n - i-09f51a313146856cd\n internal: true\n listeners:\n - instance_port: '80'\n instance_protocol: http\n lb_port: '80'\n lb_protocol: http\n name: web-elb\n security_groups:\n - sg-74c46809\n subnets:\n - subnet-690a0942\n tags:\n Environment: production\n Name: web-elb\n type: aws_elb\n zone_id: Z35SXDOTRQ7X7K\nterraform_vms:\n hosts:\n i-03676fa6ba43fbb9f:\n ami: ami-b73b63a0\n ansible_groups: []\n availability_zone: us-east-1a\n data_type: aws_instance\n instance_type: t2.micro\n inventory_hostname: i-03676fa6ba43fbb9f\n key_name: aws-us-east\n network_interface_id: eni-947bbf62\n private_dns: ip-172-31-50-15.ec2.internal\n private_ip: 172.31.50.15\n public_dns: ec2-34-207-194-186.compute-1.amazonaws.com\n public_ip: 34.207.194.186\n subnet_id: subnet-690a0942\n vpc_security_group_ids:\n - sg-5a677425\n vpc_security_groups:\n - description: Security group for web production\n egress_rules:\n - cidr_blocks: []\n from_port: '0'\n protocol: '-1'\n self: 'false'\n to_port: '0'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '0'\n protocol: '-1'\n self: 'false'\n to_port: '0'\n id: sg-5a677425\n ingress_rules:\n - cidr_blocks: []\n from_port: '80'\n protocol: tcp\n self: 'false'\n to_port: '80'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '22'\n protocol: tcp\n self: 'false'\n to_port: '22'\n - cidr_blocks: []\n from_port: '22'\n protocol: tcp\n self: 'false'\n to_port: '22'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '80'\n protocol: tcp\n self: 'false'\n to_port: '80'\n name: web-production-sg\n i-09f51a313146856cd:\n ami: ami-b73b63a0\n ansible_groups: []\n availability_zone: us-east-1a\n data_type: aws_instance\n instance_type: t2.micro\n inventory_hostname: i-09f51a313146856cd\n key_name: aws-us-east\n network_interface_id: eni-0679bdf0\n private_dns: ip-172-31-63-104.ec2.internal\n private_ip: 172.31.63.104\n public_dns: ec2-34-203-236-205.compute-1.amazonaws.com\n public_ip: 34.203.236.205\n subnet_id: subnet-690a0942\n vpc_security_group_ids:\n - sg-5a677425\n vpc_security_groups:\n - description: Security group for web production\n egress_rules:\n - cidr_blocks: []\n from_port: '0'\n protocol: '-1'\n self: 'false'\n to_port: '0'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '0'\n protocol: '-1'\n self: 'false'\n to_port: '0'\n id: sg-5a677425\n ingress_rules:\n - cidr_blocks: []\n from_port: '80'\n protocol: tcp\n self: 'false'\n to_port: '80'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '22'\n protocol: tcp\n self: 'false'\n to_port: '22'\n - cidr_blocks: []\n from_port: '22'\n protocol: tcp\n self: 'false'\n to_port: '22'\n - cidr_blocks:\n - 0.0.0.0/0\n from_port: '80'\n protocol: tcp\n self: 'false'\n to_port: '80'\n name: web-production-sg\n```\n\n### Azure\n\n```yaml\nazurerm_lb:\n hosts:\n TestLoadBalancer: {}\nazurerm_virtual_machine:\n hosts:\n Jumphost: {}\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\nconsul_cluster:\n hosts:\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\njumphosts:\n hosts:\n Jumphost: {}\nterraform_load_balancers:\n hosts:\n TestLoadBalancer:\n location: eastus\n name: TestLoadBalancer\n private_ip_address: ''\n public_ip_address: 40.121.70.170\n resource_group_name: acctestrg\n sku: Basic\n type: azurerm_lb\nterraform_vms:\n hosts:\n Jumphost:\n ansible_groups:\n - jumphosts\n - test\n ansible_host: 10.0.2.5\n data_type: azurerm_virtual_machine\n inventory_hostname: Jumphost\n location: eastus\n mac_address: 00-0D-3A-4E-59-66\n private_ips:\n - 10.0.2.5\n public_ips:\n - 104.211.58.178\n resource_group_name: acctestrg\n security_groups:\n - name: JumphostSecurityGroup1\n rules:\n - access: Deny\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '*'\n direction: Inbound\n name: DenyAll\n priority: '1000'\n protocol: '*'\n source_address_prefix: '*'\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '22'\n direction: Inbound\n name: AllowTcp22InboundFromHomeNetwork\n priority: '100'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n target: azurerm_virtual_machine.Jumphost\n vm_size: Standard_B1s\n acctvm0:\n ansible_groups:\n - test\n - consul_cluster\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n inventory_hostname: acctvm0\n location: eastus\n mac_address: 00-0D-3A-4D-99-E5\n private_ips:\n - 10.0.2.6\n public_ips: []\n resource_group_name: acctestrg\n security_groups:\n - name: TestSecurityGroup1\n rules:\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcp8500InboundHomeNetwork\n priority: '200'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Deny\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: DenyTcp8500Inbound\n priority: '202'\n protocol: Tcp\n source_address_prefix: '*'\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '22'\n direction: Inbound\n name: AllowTcp22InboundFromHomeNetwork\n priority: '100'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcpInboundLbProbe\n priority: '201'\n protocol: Tcp\n source_address_prefix: 168.63.129.16/32\n source_port_range: '*'\n target: azurerm_virtual_machine.acctvm0\n vm_size: Standard_B1s\n acctvm1:\n ansible_groups:\n - test\n - consul_cluster\n ansible_host: 10.0.2.4\n data_type: azurerm_virtual_machine\n inventory_hostname: acctvm1\n location: eastus\n mac_address: 00-0D-3A-4D-CA-DC\n private_ips:\n - 10.0.2.4\n public_ips: []\n resource_group_name: acctestrg\n security_groups:\n - name: TestSecurityGroup1\n rules:\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcp8500InboundHomeNetwork\n priority: '200'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Deny\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: DenyTcp8500Inbound\n priority: '202'\n protocol: Tcp\n source_address_prefix: '*'\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '22'\n direction: Inbound\n name: AllowTcp22InboundFromHomeNetwork\n priority: '100'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcpInboundLbProbe\n priority: '201'\n protocol: Tcp\n source_address_prefix: 168.63.129.16/32\n source_port_range: '*'\n target: azurerm_virtual_machine.acctvm1\n vm_size: Standard_B1s\n acctvm2:\n ansible_groups:\n - test\n - consul_cluster\n ansible_host: 10.0.2.7\n data_type: azurerm_virtual_machine\n inventory_hostname: acctvm2\n location: eastus\n mac_address: 00-0D-3A-4E-54-5F\n private_ips:\n - 10.0.2.7\n public_ips: []\n resource_group_name: acctestrg\n security_groups:\n - name: TestSecurityGroup1\n rules:\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcp8500InboundHomeNetwork\n priority: '200'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Deny\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: DenyTcp8500Inbound\n priority: '202'\n protocol: Tcp\n source_address_prefix: '*'\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '22'\n direction: Inbound\n name: AllowTcp22InboundFromHomeNetwork\n priority: '100'\n protocol: Tcp\n source_address_prefix: 66.73.197.182/32\n source_port_range: '*'\n - access: Allow\n description: ''\n destination_address_prefix: '*'\n destination_port_range: '8500'\n direction: Inbound\n name: AllowTcpInboundLbProbe\n priority: '201'\n protocol: Tcp\n source_address_prefix: 168.63.129.16/32\n source_port_range: '*'\n target: azurerm_virtual_machine.acctvm2\n vm_size: Standard_B1s\ntest:\n hosts:\n Jumphost: {}\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\n```\n\n### vSphere\n\n```yaml\nterraform_load_balancers:\n hosts: {}\nterraform_vms:\n hosts:\n docker-lb-01.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.163\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_lbs/docker-lb-01.lab.etsbv.internal\n inventory_hostname: docker-lb-01.lab.etsbv.internal\n mac_address: 00:50:56:aa:9c:b3\n memory: '512'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-lb-01.lab.etsbv.internal\n uuid: 422a4adb-e7d3-ea74-a69a-3ff10c13063f\n vcpu: '1'\n docker-lb-02.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.160\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_lbs/docker-lb-02.lab.etsbv.internal\n inventory_hostname: docker-lb-02.lab.etsbv.internal\n mac_address: 00:50:56:aa:f8:25\n memory: '512'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-lb-02.lab.etsbv.internal\n uuid: 422adcf8-347a-e9a5-e113-00114c1d2de9\n vcpu: '1'\n docker-mgr-01.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.171\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-01.lab.etsbv.internal\n inventory_hostname: docker-mgr-01.lab.etsbv.internal\n mac_address: 00:50:56:aa:a9:c0\n memory: '1024'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-mgr-01.lab.etsbv.internal\n uuid: 422abe05-4483-88f8-34b7-e354fdc7a211\n vcpu: '1'\n docker-mgr-02.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.166\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-02.lab.etsbv.internal\n inventory_hostname: docker-mgr-02.lab.etsbv.internal\n mac_address: 00:50:56:aa:ba:a0\n memory: '1024'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-mgr-02.lab.etsbv.internal\n uuid: 422a5d74-4de2-1df8-646b-ca62311f98ab\n vcpu: '1'\n docker-mgr-03.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.179\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_managers/docker-mgr-03.lab.etsbv.internal\n inventory_hostname: docker-mgr-03.lab.etsbv.internal\n mac_address: 00:50:56:aa:e3:06\n memory: '1024'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-mgr-03.lab.etsbv.internal\n uuid: 422a8d34-68f7-a7be-9c6a-18949ce809ed\n vcpu: '1'\n docker-storage-01.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.162\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_storage/docker-storage-01.lab.etsbv.internal\n inventory_hostname: docker-storage-01.lab.etsbv.internal\n mac_address: 00:50:56:aa:5f:cb\n memory: '512'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-storage-01.lab.etsbv.internal\n uuid: 422a264a-0816-60ff-475c-23af6c0b9d0e\n vcpu: '1'\n docker-storage-02.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.178\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_storage/docker-storage-02.lab.etsbv.internal\n inventory_hostname: docker-storage-02.lab.etsbv.internal\n mac_address: 00:50:56:aa:01:a0\n memory: '512'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-storage-02.lab.etsbv.internal\n uuid: 422ad693-162f-1c32-b90c-eee1b0a73d2b\n vcpu: '1'\n docker-wrk-01.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.155\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-01.lab.etsbv.internal\n inventory_hostname: docker-wrk-01.lab.etsbv.internal\n mac_address: 00:50:56:aa:e4:93\n memory: '4096'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-wrk-01.lab.etsbv.internal\n uuid: 422a87fe-baa2-75d6-e666-36c15f351269\n vcpu: '1'\n docker-wrk-02.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.201\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-02.lab.etsbv.internal\n inventory_hostname: docker-wrk-02.lab.etsbv.internal\n mac_address: 00:50:56:aa:e0:36\n memory: '4096'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-wrk-02.lab.etsbv.internal\n uuid: 422a49e3-746c-b550-189c-0e0179c60418\n vcpu: '1'\n docker-wrk-03.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.207\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-03.lab.etsbv.internal\n inventory_hostname: docker-wrk-03.lab.etsbv.internal\n mac_address: 00:50:56:aa:6b:d5\n memory: '4096'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-wrk-03.lab.etsbv.internal\n uuid: 422a809a-0cd2-cd84-756b-0822bc3f813a\n vcpu: '1'\n docker-wrk-04.lab.etsbv.internal:\n ansible_groups: []\n ansible_host: 10.0.102.183\n data_type: vsphere_virtual_machine\n id: Terraform Deployed/Docker/docker_swarm_workers/docker-wrk-04.lab.etsbv.internal\n inventory_hostname: docker-wrk-04.lab.etsbv.internal\n mac_address: 00:50:56:aa:b5:43\n memory: '4096'\n network_label: VSS-VLAN-102\n target: vsphere_virtual_machine.docker-wrk-04.lab.etsbv.internal\n uuid: 422aae57-67e8-50d8-66f6-3a11bdc87a78\n vcpu: '1'\nvsphere_virtual_machine:\n hosts:\n docker-lb-01.lab.etsbv.internal: {}\n docker-lb-02.lab.etsbv.internal: {}\n docker-mgr-01.lab.etsbv.internal: {}\n docker-mgr-02.lab.etsbv.internal: {}\n docker-mgr-03.lab.etsbv.internal: {}\n docker-storage-01.lab.etsbv.internal: {}\n docker-storage-02.lab.etsbv.internal: {}\n docker-wrk-01.lab.etsbv.internal: {}\n docker-wrk-02.lab.etsbv.internal: {}\n docker-wrk-03.lab.etsbv.internal: {}\n docker-wrk-04.lab.etsbv.internal: {}\n```\n\n### Mixed\n\n```yaml\nterraform_vms:\n hosts:\n Jumphost:\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.6\n public_ips:\n - 40.117.254.203\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm0:\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.6\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm1:\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.6\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm2:\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.6\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n docker-lb-01.lab.etsbv.internal:\n ansible_host: 10.0.102.163\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:9c:b3\n memory: 512\n network_label: VSS-VLAN-102\n uuid: 422a4adb-e7d3-ea74-a69a-3ff10c13063f\n vcpu: 1\n docker-lb-02.lab.etsbv.internal:\n ansible_host: 10.0.102.160\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:f8:25\n memory: 512\n network_label: VSS-VLAN-102\n uuid: 422adcf8-347a-e9a5-e113-00114c1d2de9\n vcpu: 1\n docker-mgr-01.lab.etsbv.internal:\n ansible_host: 10.0.102.171\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:a9:c0\n memory: 1024\n network_label: VSS-VLAN-102\n uuid: 422abe05-4483-88f8-34b7-e354fdc7a211\n vcpu: 1\n docker-mgr-02.lab.etsbv.internal:\n ansible_host: 10.0.102.166\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:ba:a0\n memory: 1024\n network_label: VSS-VLAN-102\n uuid: 422a5d74-4de2-1df8-646b-ca62311f98ab\n vcpu: 1\n docker-mgr-03.lab.etsbv.internal:\n ansible_host: 10.0.102.179\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:e3:06\n memory: 1024\n network_label: VSS-VLAN-102\n uuid: 422a8d34-68f7-a7be-9c6a-18949ce809ed\n vcpu: 1\n docker-storage-01.lab.etsbv.internal:\n ansible_host: 10.0.102.162\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:5f:cb\n memory: 512\n network_label: VSS-VLAN-102\n uuid: 422a264a-0816-60ff-475c-23af6c0b9d0e\n vcpu: 1\n docker-storage-02.lab.etsbv.internal:\n ansible_host: 10.0.102.178\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:01:a0\n memory: 512\n network_label: VSS-VLAN-102\n uuid: 422ad693-162f-1c32-b90c-eee1b0a73d2b\n vcpu: 1\n docker-wrk-01.lab.etsbv.internal:\n ansible_host: 10.0.102.155\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:e4:93\n memory: 4096\n network_label: VSS-VLAN-102\n uuid: 422a87fe-baa2-75d6-e666-36c15f351269\n vcpu: 1\n docker-wrk-02.lab.etsbv.internal:\n ansible_host: 10.0.102.201\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:e0:36\n memory: 4096\n network_label: VSS-VLAN-102\n uuid: 422a49e3-746c-b550-189c-0e0179c60418\n vcpu: 1\n docker-wrk-03.lab.etsbv.internal:\n ansible_host: 10.0.102.207\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:6b:d5\n memory: 4096\n network_label: VSS-VLAN-102\n uuid: 422a809a-0cd2-cd84-756b-0822bc3f813a\n vcpu: 1\n docker-wrk-04.lab.etsbv.internal:\n ansible_host: 10.0.102.183\n data_type: vsphere_virtual_machine\n mac_address: 00:50:56:aa:b5:43\n memory: 4096\n network_label: VSS-VLAN-102\n uuid: 422aae57-67e8-50d8-66f6-3a11bdc87a78\n vcpu: 1\n vars:\n terraform_load_balancers:\n - location: eastus\n name: TestLoadBalancer\n public_ip_address: 40.76.73.163\n sku: Basic\n type: azurerm_lb\n```\n\n### Azure Using Tags For Ansible Groups\n\n```yaml\ncluster:\n hosts:\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\njumphosts:\n hosts:\n Jumphost: {}\nterraform_vms:\n hosts:\n Jumphost:\n ansible_host: 10.0.2.4\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.4\n public_ips:\n - 40.117.254.203\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm0:\n ansible_host: 10.0.2.6\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.6\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm1:\n ansible_host: 10.0.2.7\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.7\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n acctvm2:\n ansible_host: 10.0.2.5\n data_type: azurerm_virtual_machine\n location: eastus\n private_ips:\n - 10.0.2.5\n public_ips: []\n resource_group_name: acctestrg\n vm_size: Standard_B1s\n vars:\n terraform_load_balancers:\n - location: eastus\n name: TestLoadBalancer\n public_ip_address: 40.76.73.163\n sku: Basic\n type: azurerm_lb\ntest:\n hosts:\n Jumphost: {}\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\n```\n\n### Groups Created By Data Types\n\nYou can also execute Ansible against a specific type by using these groups.\n\n> NOTE: Snippet below excludes all of the additional groups that are created to\n> keep example clean.\n\n```yaml\naws_instance:\n hosts:\n ubuntu_zesty: {}\nazurerm_virtual_machine:\n hosts:\n Jumphost: {}\n acctvm0: {}\n acctvm1: {}\n acctvm2: {}\nvsphere_virtual_machine:\n hosts:\n docker-lb-01.lab.etsbv.internal: {}\n docker-lb-02.lab.etsbv.internal: {}\n docker-mgr-01.lab.etsbv.internal: {}\n docker-mgr-02.lab.etsbv.internal: {}\n docker-mgr-03.lab.etsbv.internal: {}\n docker-storage-01.lab.etsbv.internal: {}\n docker-storage-02.lab.etsbv.internal: {}\n docker-wrk-01.lab.etsbv.internal: {}\n docker-wrk-02.lab.etsbv.internal: {}\n docker-wrk-03.lab.etsbv.internal: {}\n docker-wrk-04.lab.etsbv.internal: {}\n```\n\n## Ansible Terraform Module Usage\n\nWhen using the terraform Ansible module you have the ability to specify\n`target` which can be a single target or a list of targets. This is particularly\nuseful when your infrastructure is already provisioned and you would like to\ndestroy targets. We now add the actual Terraform target as a host variable named\n`target` as seen in the example below:\n\n```yaml\nterraform_vms:\n hosts:\n acctvm0:\n ansible_groups:\n - test\n - consul_cluster\n ansible_host: 10.0.2.4\n data_type: azurerm_virtual_machine\n inventory_hostname: acctvm0\n location: eastus\n private_ips:\n - 10.0.2.4\n public_ips: []\n resource_group_name: acctestrg\n target: azurerm_virtual_machine.acctvm0\n vm_size: Standard_B1s\n acctvm1:\n ansible_groups:\n - test\n - consul_cluster\n ansible_host: 10.0.2.7\n data_type: azurerm_virtual_machine\n inventory_hostname: acctvm1\n location: eastus\n private_ips:\n - 10.0.2.7\n public_ips: []\n resource_group_name: acctestrg\n target: azurerm_virtual_machine.acctvm1\n vm_size: Standard_B1s\n```\n\nNow if you would like to leverage the Terraform Ansible module to specifically\ntarget a resource we can do so as seen below:\n\n`playbook.yml`:\n\n```yaml\n---\n- hosts: localhost\n gather_facts: false\n become: false\n vars:\n scripts_dir: ../../scripts\n terraform_destroy: false\n terraform_destroy_vms: []\n terraform_project_path: ../../Terraform\n tasks:\n - name: Execute Terraform (Provision)\n terraform:\n project_path: \"{{ terraform_project_path }}\"\n state: present\n register: _terraform_execution_provision\n when: not terraform_destroy\n\n - name: Execute Terraform (Destroy VMs Only)\n terraform:\n project_path: \"{{ terraform_project_path }}\"\n state: absent\n targets: \"{{ terraform_destroy_vms | map('extract', hostvars, ['target']) | join(',') }}\"\n register: _terraform_execution_destroy\n when: >\n terraform_destroy_vms != [] and\n terraform_destroy\n```\n\nPlaybook execution:\n\nFirst run in check mode to ensure your results are as expected.\n\n```bash\nansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars \"{'terraform_destroy': true,'terraform_destroy_vms': ['acctvm0', 'acctvm1']}\" --check\n...\nTASK [Terraform Results (Destroy VMs Only)] ****************************************************************************************************************************************************************************************************************************************************************************\nok: [localhost] => {\n \"_terraform_execution_destroy\": {\n \"changed\": false,\n \"command\": \"/usr/local/bin/terraform destroy -no-color -force -lock=true -target azurerm_virtual_machine.acctvm0 -target azurerm_virtual_machine.acctvm1\",\n \"failed\": false,\n \"outputs\": {\n },\n \"state\": \"absent\",\n \"stderr\": \"\",\n \"stderr_lines\": [],\n \"stdout\": \"\",\n \"stdout_lines\": []\n }\n}\n```\n\nNow run normally after validating in check mode.\n\n```bash\nansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars \"{'terraform_destroy': true,'terraform_destroy_vms': ['acctvm0', 'acctvm1']}\"\n```\n\nIf you would like to destroy all VMs in an Ansible group:\n\n```bash\nansible-playbook -i Ansible/inventory Ansible/playbooks/terraform.yml --extra-vars \"{'terraform_destroy': true,'terraform_destroy_vms': '{{ groups.consul_cluster }}'}\" --check\n```\n\n## License\n\nMIT\n\n## Author Information\n\nLarry Smith Jr.\n\n- [EverythingShouldBeVirtual](http://everythingshouldbevirtual.com)\n- [@mrlesmithjr](https://www.twitter.com/mrlesmithjr)\n- \n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mrlesmithjr/python-terraform-to-ansible-inventory", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "TerraformToAnsibleInventory", "package_url": "https://pypi.org/project/TerraformToAnsibleInventory/", "platform": "", "project_url": "https://pypi.org/project/TerraformToAnsibleInventory/", "project_urls": { "Homepage": "https://github.com/mrlesmithjr/python-terraform-to-ansible-inventory" }, "release_url": "https://pypi.org/project/TerraformToAnsibleInventory/0.4.0/", "requires_dist": [ "argparse", "ast", "python-consul", "jinja2", "PyYaml" ], "requires_python": "", "summary": "Consumes Terraform State and generates Ansible inventory.", "version": "0.4.0" }, "last_serial": 4112762, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a1f86d7e1282eb55b91acc1f6098316f", "sha256": "ffb97d25e940339cebf2a3cbf7675171d9b2ad79d4ac8dba3485dcdad425b49a" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.1.0-py2.7.egg", "has_sig": false, "md5_digest": "a1f86d7e1282eb55b91acc1f6098316f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 16378, "upload_time": "2018-07-19T02:46:07", "url": "https://files.pythonhosted.org/packages/21/1a/9509192352a0158f6d27275decff0b56862fdef25aa7929e24d86a41b306/TerraformToAnsibleInventory-0.1.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9ba560ed011a0088dc9cfb60d557bb78", "sha256": "38a1d0dae46930914ae7f5eec3d37009f638dbd5fc6558ddd7d9caa2bc528943" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "9ba560ed011a0088dc9cfb60d557bb78", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8317, "upload_time": "2018-07-19T02:46:05", "url": "https://files.pythonhosted.org/packages/3b/e9/9524dc9f6b172a2eb6e55981d29a077301265195921dc4fea6155be80102/TerraformToAnsibleInventory-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66e267766c145e90dc53831a371cac74", "sha256": "17e403aa2632415765baf7e97528d6dd6c70e3bfe8c351b6a045a347d7798f8d" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.1.0.tar.gz", "has_sig": false, "md5_digest": "66e267766c145e90dc53831a371cac74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6611, "upload_time": "2018-07-19T02:46:08", "url": "https://files.pythonhosted.org/packages/54/78/a0bfc0879c88af7d46727a9f1799c322c5c4d4b14059d9ab0d2ea256acd5/TerraformToAnsibleInventory-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "476e01c1896a75454794db909d977201", "sha256": "7d86f6c57764f775bdc5b95bd22f2d9a3160784d10c9c5b135cac803d76f75f0" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.1-py2.7.egg", "has_sig": false, "md5_digest": "476e01c1896a75454794db909d977201", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 16384, "upload_time": "2018-07-19T02:46:06", "url": "https://files.pythonhosted.org/packages/b1/fa/740348c157af5ecbd5f2d299c1d3c1b3051795d455220924898d39f6c32f/TerraformToAnsibleInventory-0.1-py2.7.egg" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "cef4590b18b68dc40567791be81121da", "sha256": "f54857ea30ad1f4dd360203f672f634ba72c82fc6df9818246c0f865db666521" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cef4590b18b68dc40567791be81121da", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 9720, "upload_time": "2018-07-20T01:50:36", "url": "https://files.pythonhosted.org/packages/66/24/94bb9c8be33f9ad02d3023fa51053f85eca70d33176d7cf79867469df182/TerraformToAnsibleInventory-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "641cb31bc1cf674d55a05857f37d2439", "sha256": "ba8669410b2fe897a9660a73d0a8f56bd003f6b8b7cc90145c85e2ec03c8ba5b" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.0.tar.gz", "has_sig": false, "md5_digest": "641cb31bc1cf674d55a05857f37d2439", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7748, "upload_time": "2018-07-20T01:45:55", "url": "https://files.pythonhosted.org/packages/78/01/18e73c462c8f0129669b2ee6175c1278b1590b5e2453c70d1565e8f722a4/TerraformToAnsibleInventory-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "830db356e26218a2345c5cfd38bab353", "sha256": "a93c2bb5ae281b8415e978bcbd2533a13c9f55ead4bc2e1fdbccd3bf67927709" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "830db356e26218a2345c5cfd38bab353", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13019, "upload_time": "2018-07-20T02:07:04", "url": "https://files.pythonhosted.org/packages/64/73/37a61201843bdc687d9b24cd97c35336d7cf3e0ce66c3523ede0e1906950/TerraformToAnsibleInventory-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f15ac72e8219640069f94fcfb0c3e877", "sha256": "d3c845ebddd38e8175bc24f9383e53b236c0d67dedb9247e85abb0cee68f6488" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f15ac72e8219640069f94fcfb0c3e877", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12345, "upload_time": "2018-07-20T02:07:05", "url": "https://files.pythonhosted.org/packages/3e/27/ea1a7ef4e80ac5d7fc70615d1fe8d7d0c9233abac72f84ca9d7629b6cc9c/TerraformToAnsibleInventory-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c1c79b96f90e689410613f9c05c59aa0", "sha256": "ee107f59cefefb70451b5b97ccdbf772cd4a182bc392cf71885e4a2fac9d2d85" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "c1c79b96f90e689410613f9c05c59aa0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13065, "upload_time": "2018-07-20T02:13:46", "url": "https://files.pythonhosted.org/packages/69/8b/615bea5feec8a32106c1d7b67ad7428179ae1e8bc827aa2e82b7dd69496f/TerraformToAnsibleInventory-0.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50c715a99076efcbd4079c76aa61bb06", "sha256": "b425c6eb5b521548c9b80cf7cda7051c8cc1a86e53fe751a63e05b703d0e12bc" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.2.tar.gz", "has_sig": false, "md5_digest": "50c715a99076efcbd4079c76aa61bb06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12441, "upload_time": "2018-07-20T02:13:47", "url": "https://files.pythonhosted.org/packages/65/6b/bc9bf4566848ce38b5beb04af4ed1c184ce5916539807c5d778fc8ab4b67/TerraformToAnsibleInventory-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "978114a4c295c573063c21af0ee7237b", "sha256": "e9eb4030eef8f58fb474a4a2b0f924b131673bc8fe3481ecaf479b51953dd1cd" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "978114a4c295c573063c21af0ee7237b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13236, "upload_time": "2018-07-20T04:37:21", "url": "https://files.pythonhosted.org/packages/a7/c9/5c379c23a43774b80196140388194a304db20b532e4cdc8894589b0b797d/TerraformToAnsibleInventory-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e1969b9bac0ab71564215850b57d8b24", "sha256": "2df47689fb6d5da008b53562b5a034651ff59b1fe54aba1149d70e25da30961d" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.3.tar.gz", "has_sig": false, "md5_digest": "e1969b9bac0ab71564215850b57d8b24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12621, "upload_time": "2018-07-20T04:37:22", "url": "https://files.pythonhosted.org/packages/5e/6f/911166ce1bebba7b16b28e6516c17c7d22ddfec05d9d02416615bbb234a3/TerraformToAnsibleInventory-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a38761f758a39d0ebffe1491632b3289", "sha256": "a7a2bd0a1f1568b43e0c7fe4934486b60c059bb92cf5c77d5894ed63f9d8ffd6" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "a38761f758a39d0ebffe1491632b3289", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13320, "upload_time": "2018-07-20T23:14:36", "url": "https://files.pythonhosted.org/packages/67/02/0d5e584d0fa10a4008099f3b4c5bccb1b93e5ca7ba4681a56df4b9c9918f/TerraformToAnsibleInventory-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4f2c0f5a1519882c313cbc0b3a3f842", "sha256": "4457f12b91c149040ca00c37c79b9f3c81f36aa92a4108e886007eb40ee2b620" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b4f2c0f5a1519882c313cbc0b3a3f842", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12664, "upload_time": "2018-07-20T23:14:37", "url": "https://files.pythonhosted.org/packages/83/96/f855a371f1f684165c1d93b51f93aeab91b287356353d03e401bfb4432a1/TerraformToAnsibleInventory-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "93c78fd9efd5ce9d74cd7e86e27979b2", "sha256": "ba7fb07e596b7f39c95d31fc5b6fe9ba3ebc822251852795670958139b31e820" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "93c78fd9efd5ce9d74cd7e86e27979b2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13268, "upload_time": "2018-07-21T01:16:36", "url": "https://files.pythonhosted.org/packages/a4/2d/9d23c80506d05693e2f4f1fc592b2b7876d0bcf099d0f4ec065fdd73c53b/TerraformToAnsibleInventory-0.2.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eeaa90f86acaebfbb43055d9c3c99ab", "sha256": "e310f7095ad03bdc8fef44b928dcab9a958eefa24b2763cb9c807de0195984fc" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.2.5.tar.gz", "has_sig": false, "md5_digest": "8eeaa90f86acaebfbb43055d9c3c99ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12656, "upload_time": "2018-07-21T01:16:38", "url": "https://files.pythonhosted.org/packages/67/aa/c3d37a6da05760d8a0ac42d938e7300613d70d22553919589e3715e86b58/TerraformToAnsibleInventory-0.2.5.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c5260d191443c0ad20941d6eb6c134d9", "sha256": "6c6d9b5a10f74129bf4a993289d77d3fb47097919d7566d1ba801df0bbaa7215" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "c5260d191443c0ad20941d6eb6c134d9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14211, "upload_time": "2018-07-21T04:45:47", "url": "https://files.pythonhosted.org/packages/78/3d/1464f1d49d3aac16ae053a74e4ae716c6f41ad99ec8448fac2fcb516d369/TerraformToAnsibleInventory-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53eba1e470ed411551a09573d2d2722a", "sha256": "c6ba5c38d52874b4ee57c9e8f863eb675f6cbf50f3a86e1d98cd2b53ceec7a0c" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.3.0.tar.gz", "has_sig": false, "md5_digest": "53eba1e470ed411551a09573d2d2722a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13211, "upload_time": "2018-07-21T04:45:48", "url": "https://files.pythonhosted.org/packages/d5/fd/bff36ba621a36e17f4ddd58f215b98f719d495ebc492b433f564c2660881/TerraformToAnsibleInventory-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7c3b12abaae5a8cb5ff2d9acc5a6b6d9", "sha256": "c3778c21ebf57c8ea514efdf24c69f22cee831b81328b8d3750fae0a38a0863f" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.3.1-py2-none-any.whl", "has_sig": false, "md5_digest": "7c3b12abaae5a8cb5ff2d9acc5a6b6d9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14491, "upload_time": "2018-07-21T05:32:02", "url": "https://files.pythonhosted.org/packages/3b/73/53467754fe55184d23b4b528b2ee5a7a6917822a7d47158442ad76caab99/TerraformToAnsibleInventory-0.3.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0318c92375eaf6fcd7c986e133f01b7d", "sha256": "6656c775516eb98231e1eabc02767e9910e4188209830897ed0d89257d800575" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0318c92375eaf6fcd7c986e133f01b7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13482, "upload_time": "2018-07-21T05:32:04", "url": "https://files.pythonhosted.org/packages/0c/b5/859a6d70ee625d3fa55b8ecc2bc07a772d3a063007954e6669fbb9b15152/TerraformToAnsibleInventory-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "32ad2941b0ccf70419db320cdc6c3534", "sha256": "1aeeb4e536c8892c6fc1a9bae9b11e47b5d22a8b8e9541d163130d89a25b436f" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "32ad2941b0ccf70419db320cdc6c3534", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 21540, "upload_time": "2018-07-29T01:19:58", "url": "https://files.pythonhosted.org/packages/59/57/9b83a092b4f89cec10f0f9cf6d5602a96798a5e8a2750afb8458d09ef20d/TerraformToAnsibleInventory-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "345553f94fa0526ab5bb49c10954b982", "sha256": "d151e655979664a0e36e85e831df1acf2906295be03516e315c78093518de19b" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.4.0.tar.gz", "has_sig": false, "md5_digest": "345553f94fa0526ab5bb49c10954b982", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22341, "upload_time": "2018-07-29T01:19:59", "url": "https://files.pythonhosted.org/packages/ff/66/19cc351f7808fd965264a93f65c52af06be238aeb0f92153962d82b07e7e/TerraformToAnsibleInventory-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "32ad2941b0ccf70419db320cdc6c3534", "sha256": "1aeeb4e536c8892c6fc1a9bae9b11e47b5d22a8b8e9541d163130d89a25b436f" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "32ad2941b0ccf70419db320cdc6c3534", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 21540, "upload_time": "2018-07-29T01:19:58", "url": "https://files.pythonhosted.org/packages/59/57/9b83a092b4f89cec10f0f9cf6d5602a96798a5e8a2750afb8458d09ef20d/TerraformToAnsibleInventory-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "345553f94fa0526ab5bb49c10954b982", "sha256": "d151e655979664a0e36e85e831df1acf2906295be03516e315c78093518de19b" }, "downloads": -1, "filename": "TerraformToAnsibleInventory-0.4.0.tar.gz", "has_sig": false, "md5_digest": "345553f94fa0526ab5bb49c10954b982", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22341, "upload_time": "2018-07-29T01:19:59", "url": "https://files.pythonhosted.org/packages/ff/66/19cc351f7808fd965264a93f65c52af06be238aeb0f92153962d82b07e7e/TerraformToAnsibleInventory-0.4.0.tar.gz" } ] }