Skip to content

Instantly share code, notes, and snippets.

@1stvamp
Last active August 17, 2017 15:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1stvamp/5b46c816f3652d82de316a4e1372173d to your computer and use it in GitHub Desktop.
Save 1stvamp/5b46c816f3652d82de316a4e1372173d to your computer and use it in GitHub Desktop.
Methods for reading and writing terraform JSON that uses multiple object with the same key string
#!/usr/bin/env python3
import json
def list_hook(pairs):
result = {}
for name, value in pairs:
if name in ('data', 'module', 'resource', 'provider', 'backend'):
result.setdefault(name, []).append(value)
else:
result[name] = value
return result
class FakeDict(dict):
def __init__(self, items):
self['something'] = 'something'
self._items = items
def items(self):
return self._items
data = json.load(open('./test.tf.json'), object_pairs_hook = list_hook)
print(data)
data2 = [('resource', v) for v in data['resource']]
print(json.dumps(FakeDict(data2)))
{
"resource": {
"openstack_networking_network_v2": {
"tf-net": {
"name": "tf-net",
"admin_state_up": "true"
}
}
},
"resource": {
"openstack_networking_subnet_v2": {
"tf-subnet": {
"name": "tf-subnet",
"network_id": "${openstack_networking_network_v2.tf-net.id}",
"cidr": "192.168.200.0/24",
"ip_version": 4,
"dns_nameservers": [
"8.8.8.8",
"8.8.4.4"
]
}
}
},
"resource": {
"openstack_networking_router_v2": {
"tf-router": {
"name": "tf-router",
"admin_state_up": "true",
"external_gateway": "${var.external_gateway}"
}
}
},
"resource": {
"openstack_networking_router_interface_v2": {
"tf-router-iface": {
"router_id": "${openstack_networking_router_v2.tf-router.id}",
"subnet_id": "${openstack_networking_subnet_v2.tf-subnet.id}"
}
}
},
"resource": {
"openstack_compute_floatingip_v2": {
"tf-fip": {
"pool": "${var.pool}",
"depends_on": [
"openstack_networking_router_interface_v2.tf-router-iface"
]
}
}
},
"resource": {
"openstack_compute_instance_v2": {
"tf-instance": {
"name": "tf-instance",
"image_name": "${var.image}",
"flavor_name": "${var.flavor}",
"key_pair": "${var.key_pair}",
"floating_ip": "${openstack_compute_floatingip_v2.tf-fip.address}",
"security_groups": [
"default",
"basic-services"
],
"network": {
"uuid": "${openstack_networking_network_v2.tf-net.id}"
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment