2014-09-05 3 views
1

Есть ли лучший способ написать sudo -iu username -command- для каждой команды в недоступном для интерактивной оболочки?ansible: sudo -iu для интерактивной оболочки

Пример:

- name: Install nodejs {{ node_version }} 
    shell: sudo -iu {{ nvm_user }} nvm install {{ node_version }} && sudo -iu {{ nvm_user }} nvm alias default {{ node_version }} 
    when: not np.stat.isdir is defined 
+0

необходимость здесь, чтобы прочитать .bash_profile получить среды настройку? – leucos

+0

Да, как я бы обычно ssh на сервере. – xpepermint

ответ

2

Вы можете задать анзибль для Судо для вас, и вызывать bash непосредственно следующим образом:

- name: Install nodejs {{ node_version }} sudo_user: "{{ nvm_user }}" sudo: true shell: bash -lc 'nvm install {{ node_version }} && nvm alias default {{ node_version }}' when: np.stat.isdir is not defined

Несколько замечаний:

  • Install nodejs {{ node_version }} вон Интерполировать
  • Вы можете заменить not x is defined с более естественным x is not defined
  • Вы можете добавить «changed_when: контролировать измененное состояние вашей команды, так что ваш TAKS идемпотентна (но это, кажется, что вы только запустить задачу, когда некоторые директории Безразлично» т уже существуют, так что я предполагаю, что государственная задача может быть только skipped/changed)
+0

Ow 'bash -lc' да, полностью забыл один :). – xpepermint

+1

'bash -lc' не работал для меня, но' bash -lci' сделал. – dannyman

Смежные вопросы