जटिल नाटकपुस्तिका जटिल स्विच के साथ बनाने और कॉन्फ़िगर करने की कोशिश नहीं कर रही है


10

यह इस प्रश्न का अनुसरण है । मैं एक Vagrant VM को प्रावधान करने के लिए Ansible का उपयोग करने की कोशिश कर रहा हूं। VM CentOS 6.4 चला रहा है। मैं निम्नलिखित (संक्षिप्त) संक्षिप्त पुस्तक का उपयोग कर रहा हूं:

- 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

वैग्रंट ठीक काम कर रहा है और एन्सिबल प्लेबुक सफलतापूर्वक अंतिम कार्य 'ओपनसीएल के साथ CURL बनाएँ' तक चलता है - जो विफल रहता है, जैसे:

    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

तो, ./buildconfकदम काम करता है, लेकिन ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nssकदम के साथ असफल हो रहा है [Errno 2] No such file or directory। मुझे लगता है कि यह है क्योंकि यह पूरी स्ट्रिंग को चलाने की कोशिश कर रहा है जैसे कि यह एक ही आदेश था?

अगर मैं shellइसके बजाय इसका उपयोग करने के लिए इसे बदल दूं command, तो मुझे इसके बदले मिल जाएगा:

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

मैंने सत्यापित किया है कि सभी कार्य उस बिंदु तक काम करते हैं, और फ़ाइलों को डाउनलोड किया जाता है और अपेक्षित स्थानों पर निकाला जाता है और पैच काम करता है ( यहां देखें )।

कार्य विफल होने के बाद (या यदि आप इसे टिप्पणी करते हैं), यदि आप एसएसएच में वीएम में कॉन्फ़िगर किए जा रहे हैं, और सभी समान चरणों को स्वयं चलाएं - प्लेबुक से सटीक मानों का उपयोग करके, यह काम करता है।

मैं अभी भी Ansible के लिए बहुत नया हूँ और मुझे यकीन नहीं है कि यह काम क्यों नहीं कर रहा है? मैं क्या गलत कर रहा हूं? क्या प्रारूप या उद्धरण का कोई रास्ता है जो configureअलग-अलग आदेश देता है ताकि यह ठीक से व्याख्या हो जाए, अगर यह मुद्दा है? क्या मुझे इसके लिए उपयोग करना चाहिए raw? या कुछ और?

जवाबों:


14

समाधान के लिए इसे बदलना है:

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

इसके लिए:

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

खोल मॉड्यूल के लिए प्रलेखन अब स्वरूपण में इस trickiness संबोधित करते हैं। वर्तमान में पूर्ण कार्य निर्माण कार्य इस तरह दिखता है:

- 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.