2015-02-16 9 views
5

से कमांड निष्पादित करने के लिए उत्तरदायी प्लेबुक I Vagrant के माध्यम से उबंटू वीएम को प्रावधान करने के लिए अपेक्षाकृत सरल उत्तरदायी प्लेबुक चलाने का प्रयास कर रहा हूं। मोटे तौर पर यह 3 चरणों इस प्रकार है:उपयोगकर्ता खोल

  1. अद्यतन और आवश्यक पैकेज इंस्टॉल
  2. एक निर्दिष्ट उपयोगकर्ता के घर
  3. को rbenv स्थापित निर्दिष्ट उपयोगकर्ता

पहले दो चरणों के लिए rbenv के माध्यम से निर्दिष्ट रूबी संस्करण स्थापित करें ठीक है लेकिन तीसरा मैं संघर्ष कर रहा हूँ। एक संदर्भ के रूप में दूसरों playbooks का उपयोग करना (rbenv के लिए एक और nvm) मैं निम्न बुनियादी प्लेबुक बनाया है:

stderr: /bin/bash: rbenv: command not found 

वहाँ करने के लिए एक सुंदर तरीका है:

--- 
- hosts: all 
    vars: 
    user: joe_bloggs 
    ruby_version: 2.1.5 

    tasks: 

    # 
    # System 
    # 

    - name: Update apt cache 
     sudo: yes 
     apt: update_cache=yes cache_valid_time=86400 

    - name: Upgrade existing system packages 
     sudo: yes 
     apt: upgrade=dist 

    - name: Install essential system packages 
     sudo: yes 
     apt: name={{ item }} state=latest 
     with_items: 
     - git 
     - curl 
     - openssl 
     - build-essential 

    - name: Add user 
     sudo: yes 
     user: name={{user}} shell=/bin/bash groups=sudo 

    # 
    # rbenv 
    # 

    - name: Install rbenv | Clone repo 
     sudo: yes 
     sudo_user: "{{ user }}" 
     git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv accept_hostkey=yes update=yes 

    - name: Install rbenv | Create plugins directory 
     sudo: yes 
     sudo_user: "{{ user }}" 
     file: path=~/.rbenv/plugins/ mode=0755 state=directory 

    - name: Install rbenv | Install ruby-build plugin 
     sudo: yes 
     sudo_user: "{{ user }}" 
     git: repo=git://github.com/sstephenson/ruby-build.git dest=~/.rbenv/plugins/ruby-build accept_hostkey=yes 

    - name: Install rbenv | Add path to profile 
     sudo: yes 
     sudo_user: "{{ user }}" 
     lineinfile: line='export PATH="$HOME/.rbenv/bin:$PATH"' regexp="\$HOME\/\.rbenv\/bin:\$PATH" dest=~/.bashrc 

    - name: Install rbenv | Enable shims in profile 
     sudo: yes 
     sudo_user: "{{ user }}" 
     lineinfile: line='eval "$(rbenv init -)"' regexp="rbenv init \-" dest=~/.bashrc 

    - name: Install Ruby | Install version 
     sudo: yes 
     sudo_user: "{{ user }}" 
     shell: rbenv install {{ ruby_version }} executable=/bin/bash 

    - name: Install Ruby | Set default version and rehash 
     sudo: yes 
     sudo_user: "{{ user }}" 
     shell: rbenv global {{ ruby_version }} && rbenv rehash executable=/bin/bash 

ऊपर प्लेबुक चल रहा है मैं एक त्रुटि का सामना उपयोगकर्ता के रूप में Ansible के माध्यम से अपने खोल और पर्यावरण चर का उपयोग कर एक आदेश चलाओ?

मैंने -i सूडो ध्वज और sudo -iu {{user}} rbenv install ... जैसे आदेश जोड़ने का प्रयास किया है, लेकिन मुझे अभी तक कोई भाग्य नहीं मिला है।

मैं rbenv निष्पादन योग्य के पूर्ण पथ को निर्दिष्ट करके रूबी इंस्टॉल को चलाने में सक्षम हूं लेकिन यह तकनीक हमेशा उपयुक्त नहीं है (कुछ टूल एक निष्पादन योग्य नहीं हो सकते हैं)।

+0

मेरा मानना ​​है कि जब आप एक विशिष्ट उपयोगकर्ता के लिए सूड करते हैं, तो आपको केवल '.bash_profile' की बजाय' .bashrc' में निर्दिष्ट वातावरण मिलता है। आप इसके बजाय आपके द्वारा स्थान निर्दिष्ट करने वाले पथ पर निर्भर कमांड के बजाए चल रहे कमांड के पूर्ण पथ को निर्दिष्ट कर सकते हैं ... मैं आपकी टिप्पणी के लिए – PhillipHolmes

+0

पर ध्यान दिए बिना उस दृष्टिकोण की अनुशंसा करता हूं। मैं उपयोगकर्ता के .bashrc (ऊपर प्लेबुक देखें) के प्रासंगिक पथ जोड़ रहा हूं लेकिन दुख की बात है कि कोई फर्क नहीं पड़ता है। मैंने पुनः लोड करने का भी प्रयास किया है। Bashrc जैसे: 'shell: bash -lc "स्रोत ~/.bashrc; rbenv ..." 'लेकिन अभी तक कोई फायदा नहीं हुआ है। –

+0

मेरा मानना ​​है कि आपको rbenv कार्यों में 'remote_user:" {{user}} "' 'sudo' और' sudo_user' (एसएसएच कुंजी जोड़ने के बाद) का उपयोग करना चाहिए। –

उत्तर

0

यदि आप उत्तर 1.4 या ऊपर का उपयोग कर रहे हैं, तो आप इसे करने के लिए remote_user पैरामीटर का उपयोग कर सकते हैं। प्लेबुक स्तर पर, या कार्य स्तर पर दोनों।

--- 
- hosts: webservers 
    remote_user: root 
    tasks: 
    - name: test connection 
     ping: 
     remote_user: yourname 

देखें - http://docs.ansible.com/playbooks_intro.html

0

मैं जबकि एक आवारा बॉक्स पर Ansible 2.1 का उपयोग कर rbenv साथ माणिक 2.2.3 स्थापित करने के लिए कोशिश कर रहा है यह एक ही मुद्दा था।

rbenv यूबंटू पर rails पर उपयोगकर्ता पर स्थापित किया गया था, जिसके पास कोई सुडो अधिकार नहीं है, लेकिन जब उत्तर मेरे उबंटू बॉक्स से कनेक्ट होता है, तो यह env को खो देता है। $ पथ /home/rails/.bashrc में परिभाषित किया गया यह सिर्फ ansible_env.PATH

मान लिया जाये कि आप rbenv इन चरणों का पालन करने के लिए स्थापित किया है चूक गया था:

git clone git://github.com/sstephenson/rbenv.git .rbenv 
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc 
echo 'eval "$(rbenv init -)"' >> ~/.bashrc 

git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build 
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc 
source ~/.bashrc 

पथ काम कर पाने के, मैं स्थापित करने के लिए की जरूरत इसे मैन्युअल रूप से है, ताकि विशेष कार्य मैंने किया था के लिए:

- name: install rubies 
    become_user: rails 
    environment: 
    PATH: "{{ ansible_env.PATH }}:/home/rails/.rbenv/shims:/home/rails/.rbenv/bin " 
    shell: '{{ rbenv_shell }} -lc "rbenv install {{ item[0] }}"' 
    with_together 
    - "{{ rubies }}" 
    - "{{ ruby_installed.results }}" 
    ... 

इस पथ अपने rbenv आदेश को ansible_env.PATH देखने के लिए संलग्न करें और अपेक्षित रूप से कार्य यह मिल जाएगा।

संबंधित मुद्दे