Ansible playbook, karmaşık anahtarlarla yapmak ve yapılandırmak için çalışmıyor


10

Bu, bu sorunun bir devamıdır. Ansible'ı bir Vagrant VM sağlamak için kullanmaya çalışıyorum. VM, CentOS 6.4 çalıştırıyor. Aşağıdaki (kısaltılmış) ansible playbook kullanıyorum:

- 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 iyi çalışıyor ve Ansible oyun kitabı başarılı bir şekilde son görevi olan 'openssl ile CURL Oluştur' çalışmasına kadar başarılı bir şekilde çalışıyor.

    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

Yani, ./buildconfadım işe yarıyor, ancak ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nssadım başarısız oluyor gibi görünüyor [Errno 2] No such file or directory. Bunun tek bir komut gibi bütün dizeyi çalıştırmaya çalıştığı için olduğunu varsayıyorum?

shellBunun yerine kullanmak için değiştirirseniz, bunun yerine bunu commandalıyorum:

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

Bu noktaya kadar olan tüm görevlerin çalıştığını doğruladım ve dosyalar indirildi ve beklenen yerlere ve yama çalışmalarına çıkarıldı ( buraya bakın ).

Görev başarısız olduktan sonra (veya yorum yaparsanız), yapılandırılan VM'ye SSH yaparsanız ve aynı oluşturma adımlarını kendiniz çalıştırırsanız - oynatma kitabındaki kesin değerleri kullanarak çalışır.

Ansible'da hala oldukça yeniyim ve bunun neden işe yaramadığından emin değilim? Neyi yanlış yapıyorum? Bu configurekomutu farklı bir şekilde biçimlendirmenin veya alıntılamanın bir yolu var mı, bu yüzden sorun varsa, doğru yorumlanmalı mı? Bunun rawiçin mi kullanmalıyım ? Veya başka bir şey?

Yanıtlar:


14

Çözüm bunu değiştirmektir:

shell: 'chdir={{ curl_dir }} "{{ item }}"'

buna:

shell: "{{ item }}"
args:
  chdir: "{{ curl_dir }}"

Kabuk modülü için dokümantasyon şimdi biçimlendirilmesinde bu trickiness giderir. Tam çalışma derleme görevi şu anda şöyle görünüyor:

- name: Build CURL with openssl
  shell: "{{ item }}"
  args:
    chdir: "{{ curl_dir }}"
  with_items:
    - ./buildconf
    - ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss
    - make
    - make install
    - ldconfig
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.