Commit cd14cb70 authored by Grégoire Pineau's avatar Grégoire Pineau

[Provisioner][Ansible] Added support for inventory group

parent c8b3dfff
...@@ -47,6 +47,9 @@ type Config struct { ...@@ -47,6 +47,9 @@ type Config struct {
// The optional inventory file // The optional inventory file
InventoryFile string `mapstructure:"inventory_file"` InventoryFile string `mapstructure:"inventory_file"`
// The optional inventory groups
InventoryGroups []string `mapstructure:"inventory_groups"`
} }
type Provisioner struct { type Provisioner struct {
...@@ -99,9 +102,10 @@ func (p *Provisioner) Prepare(raws ...interface{}) error { ...@@ -99,9 +102,10 @@ func (p *Provisioner) Prepare(raws ...interface{}) error {
} }
sliceTemplates := map[string][]string{ sliceTemplates := map[string][]string{
"extra_arguments": p.config.ExtraArguments, "extra_arguments": p.config.ExtraArguments,
"playbook_paths": p.config.PlaybookPaths, "playbook_paths": p.config.PlaybookPaths,
"role_paths": p.config.RolePaths, "role_paths": p.config.RolePaths,
"inventory_groups": p.config.InventoryGroups,
} }
for n, slice := range sliceTemplates { for n, slice := range sliceTemplates {
...@@ -196,7 +200,15 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { ...@@ -196,7 +200,15 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error {
return fmt.Errorf("Error preparing inventory file: %s", err) return fmt.Errorf("Error preparing inventory file: %s", err)
} }
defer os.Remove(tf.Name()) defer os.Remove(tf.Name())
_, err = tf.Write([]byte("127.0.0.1")) if len(p.config.InventoryGroups) != 0 {
content := ""
for _, group := range p.config.InventoryGroups {
content += fmt.Sprintf("[%s]\n127.0.0.1\n", group)
}
_, err = tf.Write([]byte(content))
} else {
_, err = tf.Write([]byte("127.0.0.1"))
}
if err != nil { if err != nil {
tf.Close() tf.Close()
return fmt.Errorf("Error preparing inventory file: %s", err) return fmt.Errorf("Error preparing inventory file: %s", err)
......
...@@ -41,6 +41,16 @@ Optional: ...@@ -41,6 +41,16 @@ Optional:
* `extra_arguments` (array of strings) - An array of extra arguments to pass to the * `extra_arguments` (array of strings) - An array of extra arguments to pass to the
ansible command. By default, this is empty. ansible command. By default, this is empty.
* `inventory_groups` (string) - You can let Packer generate a temporary inventory
for you. It will contains only `127.0.0.1`. Thanks to `inventory_groups`,
packer will set the current machine into different groups and will
generate an inventory like:
[my_group_1]
127.0.0.1
[my_group_2]
127.0.0.1
* `inventory_file` (string) - The inventory file to be used by ansible. * `inventory_file` (string) - The inventory file to be used by ansible.
This file must exist on your local system and will be uploaded to the This file must exist on your local system and will be uploaded to the
remote machine. remote machine.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment