Vagrant aracılığıyla Ubuntu VM'yi sağlamak için nispeten basit bir Ansible oynatma kitabı çalıştırmaya çalışıyorum. Kabaca bunun 3 adımları izler:Kullanıcı kabuğundan komutları yürütmek için Ansible playbook
- Güncelleme ve yüklemek gerekli paketleri
- belirtilen kullanıcı
ilk iki adım için rbenv yoluyla belirlenen Yakut sürümünü yükleyin belirli bir kullanıcının ev
stderr: /bin/bash: rbenv: command not found
zarif bir yolu var mı: Ben bir hatayla karşılaşırsanız
---
- 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
yukarıdaki senaryo çalıştırma: (rbenv diğeri nvm) Ben aşağıdaki temel taktik kitabı oluşturduk referans olarak başkalarının playbooks kullanma Bir kullanıcı olarak Ansible üzerinden bir komut çalıştırarak, kendi kabuk ve ortam değişkenlerini yüklüyor mu?
-i
sudo bayrağı ve sudo -iu {{user}} rbenv install ...
gibi komutları eklemeyi denedim ancak henüz şansım olmadı.
Ruby yüklemesini rbenv
yürütülebilir dosyasının tam yolunu belirterek çalıştırabilirim ancak bu teknik her zaman uygun değil (bazı araçlar tek bir yürütülebilir dosya sunmuyor olabilir).
Belirli bir kullanıcıya söyledikten sonra, yalnızca .bashrp yerine ".bash_profile" yerine belirtilen ortamı aldığınıza inanıyorum. Bunun yerine, bulunduğunuz yeri belirten yola dayanan bir komut yerine, çalıştırdığınız komutun tam yolunu belirtebilirsiniz ... Bu yaklaşımı ne olursa olsun tavsiye ederim – PhillipHolmes
Yorumunuz için teşekkürler. Kullanıcının .bashrc ile ilgili yollarını ekliyorum (yukarıdaki oyun kitabına bakın) ama ne yazık ki herhangi bir fark yaratmıyor. Hatta .bashrc'yi yeniden yüklemeyi denedim: 'shell: bash -lc 'source ~/.bashrc; rbenv ...'' ama henüz boşuna değil. –
"remote_user:" {{user}} "' yerine "sudo" ve "sudo_user" yerine (SSH anahtarını ekledikten sonra) rbenv görevlerinde kullanmanız gerektiğine inanıyorum. –