I'm trying to use Ansible to provision a Vagrant VM. The VM is running
CentOS 6.4. I'm using the following (abbreviated) ansible playbook:
- hosts: default
vars:
home: '/home/vagrant'
curl_version: '7_19_7'
curl_url: 'https://github.com/bagder/curl/archive/curl-{{
curl_version }}.tar.gz'
curl_dir: '{{ home }}/curl-curl-{{ curl_version }}'
# user: vagrant
remote_user: vagrant
sudo: yes
tasks:
- name: Ensure required packages and installed and up to date - pt1
yum: pkg={{ item }} state=present
with_items:
- make
- gcc
- etc...
# Lots more yum tasks in here
- name: Ensure CURL source downloaded
get_url: url={{ curl_url }} dest=/home/vagrant/curl-{{ curl_version
}}.tar
- name: Extract CURL source
command: tar -zxf {{ home }}/curl-{{ curl_version }}.tar creates={{
curl_dir }}
- name: Copy ssh patch over
copy: src=./files/ssh.c.patch dest={{ home }}/ssh.c.patch
- name: Patch CURL with openssl
shell: patch -t {{ curl_dir }}/lib/ssh.c {{ home }}/ssh.c.patch
chdir={{ curl_dir }}/lib
when: path_file_result.changed
- name: Build CURL with openssl
command: 'chdir={{ curl_dir }} "{{ item }}"'
with_items:
- ./buildconf
- ./configure --with-gssapi --with-libidn --with-libssh2
--prefix=/usr --without-nss
- make
- make install
- ldconfig
Vagrant is working fine and the Ansible playbook runs successfully up to
the last task 'Build CURL with openssl' - which fails, like so:
TASK: [Build CURL with openssl]
***********************************************
changed: [default] => (item=./buildconf) => {"changed": true, "cmd":
["./buildconf"], "delta": "0:00:10.709817", "end": "2014-02-07
02:26:44.802652", "item": "./buildconf", "rc": 0, "start": "2014-02-07
02:26:34.092835", "stderr": "configure.ac:78: installing `./compile'
configure.ac:73: installing `./config.guess'
configure.ac:73: installing `./config.sub'
configure.ac:65: installing `./missing'
Makefile.am: installing `./depcomp'
configure.ac:137: installing `./config.guess'
configure.ac:137: installing `./config.sub'
docs/examples/Makefile.am: installing `./depcomp'", "stdout":
"buildconf: autoconf version 2.63 (ok)
buildconf: autom4te version 2.63 (ok)
buildconf: autoheader version 2.63 (ok)
buildconf: automake version 1.11.1 (ok)
buildconf: aclocal version 1.11.1 (ok)
buildconf: libtool version 2.2.6 (ok)
buildconf: libtoolize found
buildconf: GNU m4 version 1.4.13 (ok)
buildconf: running libtoolize
buildconf: running aclocal
buildconf: running aclocal hack to convert all mv to mv -f
buildconf: running autoheader
buildconf: cp lib/curl_config.h.in src/curl_config.h.in
buildconf: running autoconf
buildconf: running in ares
buildconf: running automake
buildconf: OK"}
failed: [default] => (item=./configure --with-gssapi --with-libidn
--with-libssh2 --prefix=/usr --without-nss) => {"cmd": ["./configure
--with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss"],
"failed": true, "item": "./configure --with-gssapi --with-libidn
--with-libssh2 --prefix=/usr --without-nss", "rc": 2}
msg: [Errno 2] No such file or directory
failed: [default] => (item=make) => {"changed": true, "cmd": ["make"],
"delta": "0:00:00.001828", "end": "2014-02-07 02:26:45.003968", "item":
"make", "rc": 2, "start": "2014-02-07 02:26:45.002140"}
stderr: make: *** No targets specified and no makefile found. Stop.
failed: [default] => (item=make install) => {"cmd": ["make install"],
"failed": true, "item": "make install", "rc": 2}
msg: [Errno 2] No such file or directory
changed: [default] => (item=ldconfig) => {"changed": true, "cmd":
["ldconfig"], "delta": "0:00:00.009685", "end": "2014-02-07
02:26:46.096829", "item": "ldconfig", "rc": 0, "start": "2014-02-07
02:26:46.087144", "stderr": "", "stdout": ""}
FATAL: all hosts have already failed -- aborting
So, the `./buildconf` step works, but the `./configure --with-gssapi
--with-libidn --with-libssh2 --prefix=/usr --without-nss` step seems to be
failing with `[Errno 2] No such file or directory`. I presume this is
because it's trying to run that whole string like it was a single command?
If I change it to use `shell` instead of `command`, I get this instead:
failed: [default] => (item=./configure --with-gssapi --with-libidn
--with-libssh2 --prefix=/usr --without-nss) => {"changed": true, "cmd": "
\"./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr
--without-nss\" ", "delta": "0:00:00.001171", "end": "2014-02-07
02:31:34.862373", "item": "./configure --with-gssapi --with-libidn
--with-libssh2 --prefix=/usr --without-nss", "rc": 127, "start":
"2014-02-07 02:31:34.861202"}
stderr: /bin/sh: ./configure --with-gssapi --with-libidn --with-libssh2
--prefix=/usr --without-nss: No such file or directory
I've verified that all the tasks up to that point work, and the files are
downloaded and extracted to the expected places and the patch works (see
here:
http://serverfault.com/questions/573505/ansible-playbook-not-working-trying-to-run-patch
).
After the task fails (or if you comment it out), if you SSH into the VM
that's being configured, and run all the same build steps yourself - using
the exact values from the playbook, it works.
I'm still pretty new to Ansible and I'm not sure why this isn't working?
What am I doing wrong? Is there some way to format or quote that `configure`
command differently so it gets interpreted properly, if that's the issue?
Should I be using `raw` for this? Or something else?
Thanks!
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.