से कमांड निष्पादित करने के लिए उत्तरदायी प्लेबुक I Vagrant के माध्यम से उबंटू वीएम को प्रावधान करने के लिए अपेक्षाकृत सरल उत्तरदायी प्लेबुक चलाने का प्रयास कर रहा हूं। मोटे तौर पर यह 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
निष्पादन योग्य के पूर्ण पथ को निर्दिष्ट करके रूबी इंस्टॉल को चलाने में सक्षम हूं लेकिन यह तकनीक हमेशा उपयुक्त नहीं है (कुछ टूल एक निष्पादन योग्य नहीं हो सकते हैं)।
मेरा मानना है कि जब आप एक विशिष्ट उपयोगकर्ता के लिए सूड करते हैं, तो आपको केवल '.bash_profile' की बजाय' .bashrc' में निर्दिष्ट वातावरण मिलता है। आप इसके बजाय आपके द्वारा स्थान निर्दिष्ट करने वाले पथ पर निर्भर कमांड के बजाए चल रहे कमांड के पूर्ण पथ को निर्दिष्ट कर सकते हैं ... मैं आपकी टिप्पणी के लिए – PhillipHolmes
पर ध्यान दिए बिना उस दृष्टिकोण की अनुशंसा करता हूं। मैं उपयोगकर्ता के .bashrc (ऊपर प्लेबुक देखें) के प्रासंगिक पथ जोड़ रहा हूं लेकिन दुख की बात है कि कोई फर्क नहीं पड़ता है। मैंने पुनः लोड करने का भी प्रयास किया है। Bashrc जैसे: 'shell: bash -lc "स्रोत ~/.bashrc; rbenv ..." 'लेकिन अभी तक कोई फायदा नहीं हुआ है। –
मेरा मानना है कि आपको rbenv कार्यों में 'remote_user:" {{user}} "' 'sudo' और' sudo_user' (एसएसएच कुंजी जोड़ने के बाद) का उपयोग करना चाहिए। –