With this change, the existing host-based Ansible provisioner is refactored to share a maximum of code with this new guest-based Ansible provisioner. At this stage of development, the existing unit tests are intentionally modified as little as possible, to keep safe the existing funtionalities. Other issues resolved by this changeset: - Display a warning when running from a Windows host [GH-5292] - Do not run `ansible-playbook` in verbose mode when the `verbose` option is set to an empty string.
106 lines
4.2 KiB
Ruby
106 lines
4.2 KiB
Ruby
module VagrantPlugins
|
|
module Ansible
|
|
module Config
|
|
class Base < Vagrant.plugin("2", :config)
|
|
|
|
attr_accessor :extra_vars
|
|
attr_accessor :groups
|
|
attr_accessor :inventory_path
|
|
attr_accessor :limit
|
|
attr_accessor :playbook
|
|
attr_accessor :raw_arguments
|
|
attr_accessor :skip_tags
|
|
attr_accessor :start_at_task
|
|
attr_accessor :sudo
|
|
attr_accessor :sudo_user
|
|
attr_accessor :tags
|
|
attr_accessor :vault_password_file
|
|
attr_accessor :verbose
|
|
|
|
def initialize
|
|
@extra_vars = UNSET_VALUE
|
|
@groups = UNSET_VALUE
|
|
@inventory_path = UNSET_VALUE
|
|
@limit = UNSET_VALUE
|
|
@playbook = UNSET_VALUE
|
|
@raw_arguments = UNSET_VALUE
|
|
@skip_tags = UNSET_VALUE
|
|
@start_at_task = UNSET_VALUE
|
|
@sudo = UNSET_VALUE
|
|
@sudo_user = UNSET_VALUE
|
|
@tags = UNSET_VALUE
|
|
@vault_password_file = UNSET_VALUE
|
|
@verbose = UNSET_VALUE
|
|
end
|
|
|
|
def finalize!
|
|
@extra_vars = nil if @extra_vars == UNSET_VALUE
|
|
@groups = {} if @groups == UNSET_VALUE
|
|
@inventory_path = nil if @inventory_path == UNSET_VALUE
|
|
@limit = nil if @limit == UNSET_VALUE
|
|
@playbook = nil if @playbook == UNSET_VALUE
|
|
@raw_arguments = nil if @raw_arguments == UNSET_VALUE
|
|
@skip_tags = nil if @skip_tags == UNSET_VALUE
|
|
@start_at_task = nil if @start_at_task == UNSET_VALUE
|
|
@sudo = false if @sudo != true
|
|
@sudo_user = nil if @sudo_user == UNSET_VALUE
|
|
@tags = nil if @tags == UNSET_VALUE
|
|
@vault_password_file = nil if @vault_password_file == UNSET_VALUE
|
|
@verbose = false if @verbose == UNSET_VALUE
|
|
end
|
|
|
|
# Just like the normal configuration "validate" method except that
|
|
# it returns an array of errors that should be merged into some
|
|
# other error accumulator.
|
|
def validate(machine)
|
|
@errors = _detected_errors
|
|
|
|
# Validate that a playbook path was provided
|
|
if !playbook
|
|
@errors << I18n.t("vagrant.provisioners.ansible.no_playbook")
|
|
end
|
|
|
|
# Validate the existence of the playbook
|
|
if playbook
|
|
check_path_is_a_file(machine, playbook, "vagrant.provisioners.ansible.playbook_path_invalid")
|
|
end
|
|
|
|
# Validate the existence of the inventory_path, if specified
|
|
if inventory_path
|
|
check_path_exists(machine, inventory_path, "vagrant.provisioners.ansible.inventory_path_invalid")
|
|
end
|
|
|
|
# Validate the existence of the vault_password_file, if specified
|
|
if vault_password_file
|
|
check_path_is_a_file(machine, vault_password_file, "vagrant.provisioners.ansible.vault_password_file_invalid")
|
|
end
|
|
|
|
# Validate that extra_vars is either a hash, or a path to an
|
|
# existing file
|
|
if extra_vars
|
|
extra_vars_is_valid = extra_vars.kind_of?(Hash) || extra_vars.kind_of?(String)
|
|
if extra_vars.kind_of?(String)
|
|
# Accept the usage of '@' prefix in Vagrantfile (e.g. '@vars.yml'
|
|
# and 'vars.yml' are both supported)
|
|
match_data = /^@?(.+)$/.match(extra_vars)
|
|
extra_vars_path = match_data[1].to_s
|
|
extra_vars_is_valid = check_path_is_a_file(machine, extra_vars_path)
|
|
if extra_vars_is_valid
|
|
@extra_vars = '@' + extra_vars_path
|
|
end
|
|
end
|
|
|
|
if !extra_vars_is_valid
|
|
@errors << I18n.t(
|
|
"vagrant.provisioners.ansible.extra_vars_invalid",
|
|
type: extra_vars.class.to_s,
|
|
value: extra_vars.to_s)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|