1
1
mirror of https://github.com/adammck/terraform-inventory synced 2024-11-23 04:22:08 +01:00

Fix non-string vars in --inventory output (#72)

* Fix --inventory output
* Sort --inventory output
This commit is contained in:
Seua Polyakov 2017-09-19 17:54:24 +03:00 committed by Adam Mckaig
parent 3093ecd497
commit c23c86aa4b
2 changed files with 172 additions and 4 deletions

20
cli.go

@ -57,9 +57,14 @@ func cmdList(stdout io.Writer, stderr io.Writer, s *state) int {
func cmdInventory(stdout io.Writer, stderr io.Writer, s *state) int { func cmdInventory(stdout io.Writer, stderr io.Writer, s *state) int {
groups := gatherResources(s) groups := gatherResources(s)
for group, res := range groups { group_names := []string{}
for group, _ := range groups {
group_names = append(group_names, group)
}
sort.Strings(group_names)
for _, group := range group_names {
switch grp := res.(type) { switch grp := groups[group].(type) {
case []string: case []string:
writeLn("["+group+"]", stdout, stderr) writeLn("["+group+"]", stdout, stderr)
for _, item := range grp { for _, item := range grp {
@ -73,8 +78,15 @@ func cmdInventory(stdout io.Writer, stderr io.Writer, s *state) int {
} }
writeLn("", stdout, stderr) writeLn("", stdout, stderr)
writeLn("["+group+":vars]", stdout, stderr) writeLn("["+group+":vars]", stdout, stderr)
for key, item := range grp.Vars { vars := []string{}
writeLn(key+"="+item.(string), stdout, stderr) for key, _ := range grp.Vars {
vars = append(vars, key)
}
sort.Strings(vars)
for _, key := range vars {
jsonItem, _ := json.Marshal(grp.Vars[key])
itemLn := fmt.Sprintf("%s", string(jsonItem))
writeLn(key+"="+itemLn, stdout, stderr)
} }
} }

@ -332,6 +332,147 @@ const expectedListOutput = `
} }
` `
const expectedInventoryOutput = `[all]
10.0.0.1
10.0.0.10
10.0.0.7
10.0.0.8
10.0.0.9
10.0.1.1
10.120.0.226
10.2.1.5
10.20.30.40
192.168.0.3
50.0.0.1
[all:vars]
datacenter="mydc"
ids=[1,2,3,4]
map={"key":"value"}
olddatacenter="\u003c0.7_format"
[database]
10.0.0.8
[dup]
10.0.0.1
[dup.0]
10.0.0.1
[eight]
10.0.0.8
[eight.0]
10.0.0.8
[five]
10.20.30.40
[five.0]
10.20.30.40
[four]
10.2.1.5
[four.0]
10.2.1.5
[nine]
10.0.0.9
[nine.0]
10.0.0.9
[one]
10.0.0.1
10.0.1.1
[one.0]
10.0.0.1
[one.1]
10.0.1.1
[role_rrrrrrrr]
10.20.30.40
[role_test]
10.0.0.10
[role_web]
10.0.0.1
[seven]
10.0.0.7
[seven.0]
10.0.0.7
[six]
10.120.0.226
[six.0]
10.120.0.226
[staging]
192.168.0.3
[status_superserver]
10.120.0.226
[ten]
10.0.0.10
[ten.0]
10.0.0.10
[three]
192.168.0.3
[three.0]
192.168.0.3
[two]
50.0.0.1
[two.0]
50.0.0.1
[type_aws_instance]
10.0.0.1
10.0.1.1
50.0.0.1
[type_cloudstack_instance]
10.2.1.5
[type_digitalocean_droplet]
192.168.0.3
[type_exoscale_compute]
10.0.0.9
[type_google_compute_instance]
10.0.0.8
[type_openstack_compute_instance_v2]
10.120.0.226
[type_softlayer_virtual_guest]
10.0.0.7
[type_triton_machine]
10.0.0.10
[type_vsphere_virtual_machine]
10.20.30.40
[webserver]
192.168.0.3
`
const expectedHostOneOutput = ` const expectedHostOneOutput = `
{ {
"id":"i-aaaaaaaa", "id":"i-aaaaaaaa",
@ -390,3 +531,18 @@ func TestHostCommand(t *testing.T) {
assert.Equal(t, exp, act) assert.Equal(t, exp, act)
} }
func TestInventoryCommand(t *testing.T) {
var s state
r := strings.NewReader(exampleStateFile)
err := s.read(r)
assert.NoError(t, err)
// Run the command, capture the output
var stdout, stderr bytes.Buffer
exitCode := cmdInventory(&stdout, &stderr, &s)
assert.Equal(t, 0, exitCode)
assert.Equal(t, "", stderr.String())
assert.Equal(t, expectedInventoryOutput, stdout.String())
}