Merge pull request #3203 from mtb-xt/ansible-env
Allow specifying environment variables for ansible provisioner
This commit is contained in:
commit
fb7870ad94
|
@ -38,6 +38,8 @@ type Config struct {
|
||||||
// Extra options to pass to the ansible command
|
// Extra options to pass to the ansible command
|
||||||
ExtraArguments []string `mapstructure:"extra_arguments"`
|
ExtraArguments []string `mapstructure:"extra_arguments"`
|
||||||
|
|
||||||
|
AnsibleEnvVars []string `mapstructure:"ansible_env_vars"`
|
||||||
|
|
||||||
// The main playbook file to execute.
|
// The main playbook file to execute.
|
||||||
PlaybookFile string `mapstructure:"playbook_file"`
|
PlaybookFile string `mapstructure:"playbook_file"`
|
||||||
Groups []string `mapstructure:"groups"`
|
Groups []string `mapstructure:"groups"`
|
||||||
|
@ -242,17 +244,23 @@ func (p *Provisioner) Cancel() {
|
||||||
func (p *Provisioner) executeAnsible(ui packer.Ui, comm packer.Communicator, privKeyFile string, checkHostKey bool) error {
|
func (p *Provisioner) executeAnsible(ui packer.Ui, comm packer.Communicator, privKeyFile string, checkHostKey bool) error {
|
||||||
playbook, _ := filepath.Abs(p.config.PlaybookFile)
|
playbook, _ := filepath.Abs(p.config.PlaybookFile)
|
||||||
inventory := p.config.inventoryFile
|
inventory := p.config.inventoryFile
|
||||||
|
var envvars []string
|
||||||
|
|
||||||
args := []string{playbook, "-i", inventory}
|
args := []string{playbook, "-i", inventory}
|
||||||
if len(privKeyFile) > 0 {
|
if len(privKeyFile) > 0 {
|
||||||
args = append(args, "--private-key", privKeyFile)
|
args = append(args, "--private-key", privKeyFile)
|
||||||
}
|
}
|
||||||
args = append(args, p.config.ExtraArguments...)
|
args = append(args, p.config.ExtraArguments...)
|
||||||
|
if len(p.config.AnsibleEnvVars) > 0 {
|
||||||
|
envvars = append(envvars, p.config.AnsibleEnvVars...)
|
||||||
|
}
|
||||||
|
|
||||||
cmd := exec.Command(p.config.Command, args...)
|
cmd := exec.Command(p.config.Command, args...)
|
||||||
|
|
||||||
if !checkHostKey {
|
if len(envvars) > 0 {
|
||||||
cmd.Env = os.Environ()
|
cmd.Env = os.Environ()
|
||||||
|
cmd.Env = append(cmd.Env, envvars...)
|
||||||
|
} else if !checkHostKey {
|
||||||
cmd.Env = append(cmd.Env, "ANSIBLE_HOST_KEY_CHECKING=False")
|
cmd.Env = append(cmd.Env, "ANSIBLE_HOST_KEY_CHECKING=False")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,14 @@ Optional Parameters:
|
||||||
|
|
||||||
- `extra_arguments` (array of strings) - Extra arguments to pass to Ansible.
|
- `extra_arguments` (array of strings) - Extra arguments to pass to Ansible.
|
||||||
|
|
||||||
|
- `ansible_env_vars` (array of strings) - Environment variables to set before running Ansible.
|
||||||
|
If unset, defaults to `ANSIBLE_HOST_KEY_CHECKING=False`.
|
||||||
|
Usage example:
|
||||||
|
|
||||||
|
```
|
||||||
|
"ansible_env_vars": [ "ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_SSH_ARGS='-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s'", "ANSIBLE_NOCOLOR=True" ]
|
||||||
|
```
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
||||||
The `ansible` provisioner does not support SCP to transfer files.
|
The `ansible` provisioner does not support SCP to transfer files.
|
||||||
|
|
Loading…
Reference in New Issue