func outputsAsString(state *terraform.State, modPath []string, schema []*config.Output, includeHeader bool) string { if state == nil { return "" } ms := state.ModuleByPath(modPath) if ms == nil { return "" } outputs := ms.Outputs outputBuf := new(bytes.Buffer) if len(outputs) > 0 { schemaMap := make(map[string]*config.Output) if schema != nil { for _, s := range schema { schemaMap[s.Name] = s } } if includeHeader { outputBuf.WriteString("[reset][bold][green]\nOutputs:\n\n") } // Output the outputs in alphabetical order keyLen := 0 ks := make([]string, 0, len(outputs)) for key, _ := range outputs { ks = append(ks, key) if len(key) > keyLen { keyLen = len(key) } } sort.Strings(ks) for _, k := range ks { schema, ok := schemaMap[k] if ok && schema.Sensitive { outputBuf.WriteString(fmt.Sprintf("%s = <sensitive>\n", k)) continue } v := outputs[k] switch typedV := v.Value.(type) { case string: outputBuf.WriteString(fmt.Sprintf("%s = %s\n", k, typedV)) case []interface{}: outputBuf.WriteString(formatListOutput("", k, typedV)) outputBuf.WriteString("\n") case map[string]interface{}: outputBuf.WriteString(formatMapOutput("", k, typedV)) outputBuf.WriteString("\n") } } } return strings.TrimSpace(outputBuf.String()) }