Add ability to use Ansible groups in generated inventory. Fixes #2551.

This commit is contained in:
Mark Aaron Shirley 2013-12-08 23:01:01 -08:00
parent 163947bc36
commit 906579d25a
2 changed files with 28 additions and 0 deletions

View File

@ -12,6 +12,7 @@ module VagrantPlugins
attr_accessor :tags
attr_accessor :skip_tags
attr_accessor :start_at_task
attr_accessor :groups
attr_accessor :host_key_checking
# Joker attribute, used to pass unsupported arguments to ansible anyway
@ -30,6 +31,7 @@ module VagrantPlugins
@skip_tags = UNSET_VALUE
@start_at_task = UNSET_VALUE
@raw_arguments = UNSET_VALUE
@groups = UNSET_VALUE
@host_key_checking = "true"
end
@ -46,6 +48,7 @@ module VagrantPlugins
@skip_tags = nil if @skip_tags == UNSET_VALUE
@start_at_task = nil if @start_at_task == UNSET_VALUE
@raw_arguments = nil if @raw_arguments == UNSET_VALUE
@groups = {} if @groups == UNSET_VALUE
@host_key_checking = nil if @host_key_checking == UNSET_VALUE
end

View File

@ -69,6 +69,31 @@ module VagrantPlugins
generated_inventory_file.open('w') do |file|
file.write("# Generated by Vagrant\n\n")
file.write("#{machine.name} ansible_ssh_host=#{ssh[:host]} ansible_ssh_port=#{ssh[:port]}\n")
# Write out groups information. Only include current
# machine and its groups to avoid Ansible errors on
# provisioning.
groups_of_groups = {}
included_groups = []
config.groups.each_pair do |gname, gmembers|
if gname.end_with?(":children")
groups_of_groups[gname] = gmembers
elsif gmembers.include?("#{machine.name}")
included_groups << gname
file.write("\n[#{gname}]\n")
file.write("#{machine.name}\n")
end
end
groups_of_groups.each_pair do |gname, gmembers|
unless (included_groups & gmembers).empty?
file.write("\n[#{gname}]\n")
gmembers.each do |gm|
file.write("#{gm}\n") if included_groups.include?(gm)
end
end
end
end
return generated_inventory_file.to_s