| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package fix |
| |
| import ( |
| "github.com/mitchellh/mapstructure" |
| ) |
| |
| // FixerSSHKeyPath changes the "ssh_key_path" of a template |
| // to "ssh_private_key_file". |
| type FixerSSHKeyPath struct{} |
| |
| func (FixerSSHKeyPath) DeprecatedOptions() map[string][]string { |
| return map[string][]string{ |
| "*": []string{"ssh_key_path"}, |
| } |
| } |
| |
| func (FixerSSHKeyPath) Fix(input map[string]interface{}) (map[string]interface{}, error) { |
| // The type we'll decode into; we only care about builders |
| type template struct { |
| Builders []map[string]interface{} |
| } |
| |
| // Decode the input into our structure, if we can |
| var tpl template |
| if err := mapstructure.Decode(input, &tpl); err != nil { |
| return nil, err |
| } |
| |
| for _, builder := range tpl.Builders { |
| sshKeyPathRaw, ok := builder["ssh_key_path"] |
| if !ok { |
| continue |
| } |
| |
| sshKeyPath, ok := sshKeyPathRaw.(string) |
| if !ok { |
| continue |
| } |
| |
| // only assign to ssh_private_key_file if it doesn't |
| // already exist; otherwise we'll just ignore ssh_key_path |
| _, sshPrivateIncluded := builder["ssh_private_key_file"] |
| if !sshPrivateIncluded { |
| builder["ssh_private_key_file"] = sshKeyPath |
| } |
| |
| delete(builder, "ssh_key_path") |
| } |
| |
| input["builders"] = tpl.Builders |
| return input, nil |
| } |
| |
| func (FixerSSHKeyPath) Synopsis() string { |
| return `Updates builders using "ssh_key_path" to use "ssh_private_key_file"` |
| } |