Hey Ian! Thank you for bringing more details, which helped me to figure out where is the "second" problem (very probably).
I think that the two variants below should fix your problem: 1) [recommended] use the extra_vars option <https://www.vagrantup.com/docs/provisioning/ansible_common.html#extra_vars> to pass your variable file to Ansible Playbook: ansible.extra_vars = 'overridden_variables.json' 2) use the raw_arguments option *in a way it works* ansible.raw_arguments = ["--extra-vars=@overridden_variables.json"] or ansible.raw_arguments = ["-e'@overridden_variables.json'"] or ansible.raw_arguments = ["-e", "'@overridden_variables.json'"] You also hit the same problem if you want to specify the remote user via raw_arguments ("-u ansible_user" should be changed to "--user=ansible_user" or "-uansible_user") I've just realised that this confusing "no space" issue was already reported once in the mailing list <https://groups.google.com/d/msg/vagrant-up/FxWSbUWYr-A/HCr6UvpzXREJ>, but unfortunately didn't tracked attention. I've opened GH-7890 <https://github.com/mitchellh/vagrant/issues/7890> to tackle this bug. Please give a try to the above, and let us know how it works for you. Best, Gilles Le mardi 11 octobre 2016 18:05:04 UTC+2, Ian Smith a écrit : > > Having spent time on and off today looking at this and comparing the > output of the ansible log as well as the console I think the ssh method > described is correct. The issue appears to be that the key required is not > being installed. The ansible script in question uses override JSON file to > allow per user override of the keys to be installed with the user. It > appears that running ansible via vagrant results in the -e option not being > passed through. > > In my VagrantFile I now have > > ansible.raw_arguments = ["-e '@overridden_variables.json'"] > > > > On the console output when vagrant provision is called I see > > PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING= > false ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o > IdentitiesOnly=yes -o ForwardAgent=yes -o ControlMaster=auto -o > ControlPersist=60s' ansible-playbook --connection=ssh --timeout=30 --limit > ="demo_server" --inventory-file=/home/ismith/work/vagrant/demo/.vagrant/ > provisioners/ansible/inventory -v -e '@overridden_variables.json' > add_deployment_user.yml > > > But if I look at the output in the ansible.log file I don't see the keys > defined in the override_variables.json file present - implying that the > parameter has been ignored. > > > > > On Monday, October 10, 2016 at 2:25:03 PM UTC+1, Ian Smith wrote: >> >> Hi Gilles, >> >> I *think* I see where you are going with this but it ends up with the >> following error message " UNREACHABLE! => {"changed": false, "msg": "Failed >> to connect to the host via ssh.", "unreachable": true}" >> >> Running ansible directly the following commands work >> >> ansible-playbook -v -e "@overridden_variables.json" -i >> inventories/demo.hosts >> -u ubuntu --ask-become-pass add_deployment_user.yml >> >> >> ansible-playbook -v -e "@overridden_variables.json" -i >> inventories/demo.hosts >> -u ansible_user demo.yml >> >> Therefore if I assume that the vagrant user is the same as my initial >> ubuntu user and that the first playbook creates the user "ansible_user" >> then I believe that the following should work in the same way on vagrant >> 1.8.5 >> >> Vagrant.require_version ">= 1.7.0" >> >> >> Vagrant.configure(2) do |config| >> >> >> config.vm.box = "ubuntu/trusty64" >> >> >> # Disable the new default behavior introduced in Vagrant 1.7, to >> # ensure that all Vagrant machines will use the same SSH key pair. >> # See https://github.com/mitchellh/vagrant/issues/5005 >> config.ssh.insert_key = false >> >> >> # Setup the user first >> config.vm.provision "deployuser", type: "ansible" do |ansible| >> ansible.verbose = "v" >> ansible.playbook = "add_deployment_user.yml" >> ansible.sudo = true >> ansible.raw_arguments = ["-e '@overridden_variables.json'"] >> end >> >> >> config.vm.provision "demo", type: "ansible" do |ansible| >> ansible.verbose = "v" >> ansible.playbook = "demo.yml" >> ansible.raw_arguments = ["-e '@overridden_variables.json'", "-u >> ansible_user"] >> remote_user = "ansible_user" >> ansible.raw_ssh_args = ['-o ForwardAgent=yes','-o ControlMaster=auto' >> ,'-o ControlPersist=5m'] >> ansible.force_remote_user = false >> end >> end >> >> However it doesn't. Now one of the things in the override_variables is a >> list of keys which includes my public key which is different to the >> insecure_private_key used by vagrant. So in the case of the second ssh what >> key is used? >> >> On Monday, October 10, 2016 at 7:30:06 AM UTC+1, Gilles Cornu wrote: >>> >>> Hi Ian, >>> >>> As of Vagrant 1.8+ the Ansible remote user is forced by default. >>> Therefore your use case requires to set the "force_remote_user" option to >>> *false*. >>> >>> See: >>> >>> - >>> >>> https://www.vagrantup.com/docs/provisioning/ansible.html#force_remote_user >>> - https://github.com/mitchellh/vagrant/pull/6348 >>> >>> Hope it helps... Best regards, >>> Gilles >>> >>> >>> Le samedi 8 octobre 2016 12:00:08 UTC+2, Ian Smith a écrit : >>>> >>>> Hi, >>>> >>>> Probably a daft question but I'm looking at using vagrant to automate >>>> bring up of machines created using ansible scripts. I've hit an issue in >>>> that the existing playbook uses two play calls. One to the account that >>>> already exists, so in this case vagrant and that all works. However the >>>> first playbook creates a user called "ansible_user" and then the second >>>> playbook call then uses -u ansible_user to indicate that the playbook is >>>> run as that new user. >>>> >>>> What I've found is that in the second case with vagrant the playbook is >>>> still run as the vagrant user. Even though in the output I can see that >>>> the >>>> added -u ansible_user can be seen it seems that under Vagrant it has no >>>> effect. >>>> >>>> So what I have for the playbook provisioning in my VagrantFile is the >>>> following >>>> >>>> config.vm.provision "demotest1", type: "ansible" do |ansible| >>>> >>>> ansible.verbose = "vvv" >>>> >>>> ansible.playbook = "demo.yml" >>>> >>>> ansible.raw_arguments = ["-e '@overridden_variables.json'", "-u >>>> ansible_user"] >>>> >>>> ansible.raw_ssh_args = ['-o ForwardAgent=yes','-o >>>> ControlMaster=auto','-o ControlPersist=5m'] >>>> end >>>> >>>> But I can see that with the verbose on there is an attempt to create a >>>> file in /home/ansible_user not as ansible_user which I have indicated but >>>> as vagrant which fails due to permission issues. >>>> >>>> What am I missing in the config to make this all work? >>>> >>>> Kind regards, Ian >>>> >>> -- This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list. GitHub Issues: https://github.com/mitchellh/vagrant/issues IRC: #vagrant on Freenode --- You received this message because you are subscribed to the Google Groups "Vagrant" group. To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vagrant-up/3254300d-13fa-4f3f-9d59-603ce3678340%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.