Назад | Перейти на главную страницу

Как я могу перезапустить сеанс ssh после установки nvm?

Для того, чтобы изменения вступили в силу, nvm требует, чтобы пользователь вышел из системы / снова в нее после установки. Как я могу разрешить это в недоступной задаче, выполняемой через бродягу. вот что я пробовал:

- name : Install nvm
  shell: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash
  failed_when: False
  register: nvm_installed

- name: Kill open ssh sessions - ansible should log back in on next task
  shell: "ps -ef | grep sshd | grep `whoami` | awk '{print \"kill -9\", $2}' | sh"
  when: nvm_installed | changed
  failed_when: false

- name : Install Node.js v 4.2.x
  command : nvm install v4.2

Но получаю ошибку:

fatal: [default] => SSH Error: ssh_exchange_identification: Connection closed by remote host
    while connecting to 127.0.0.1:2222
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

TASK: [check if rpmforge installed] ******************************************* 
FATAL: no hosts matched or all hosts have already failed -- aborting

команда vagrant ssh также теперь не работает с ошибкой:

ssh_exchange_identification: Connection closed by remote host

Я основал это на ответе, данном здесь - https://stackoverflow.com/questions/26677064/create-and-use-group-without-restart

Я думаю, может быть, команда kill убивает самого демона sshd?

ps -ef | grep sshd | grep `whoami`
root      2621  1247  0 11:30 ?        00:00:00 sshd: vagrant [priv]
vagrant   2625  2621  0 11:30 ?        00:00:00 sshd: vagrant@notty
root      3232  1247  4 11:34 ?        00:00:00 sshd: vagrant [priv]
vagrant   3235  3232  0 11:34 ?        00:00:00 sshd: vagrant@pts/0
vagrant   3252  3236  0 11:34 pts/0    00:00:00 grep sshd

ОБНОВИТЬ

Я также пробовал следующее:

- name : Install nvm
  shell: "curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash"
  register: nvm_installed
  failed_when: False


- name : source bash profiles
  shell : source /home/vagrant/.bashrc
  when: nvm_installed
  register: sourced

- name : Install Node.js v 4.2.x
  command : nvm install v4.2
  when: sourced

но получите следующую ошибку:

TASK: [Install Node.js v 4.2.x] *********************************************** 
failed: [default] => {"cmd": "nvm install v4.2", "failed": true, "rc": 2}
msg: [Errno 2] No such file or directory

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/Users/lukemackenzie/playbook.retry

default                    : ok=10   changed=3    unreachable=0    failed=1   

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

Если я запускаю шаг Install nvm вручную на управляемой машине, он говорит, что следующее было добавлено к .bashrc:

export NVM_DIR="/home/vagrant/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Я создал роль Galaxy, которая будет работать с Ansible 2: ssh-переподключиться

Использование:

- name : Install nvm
  shell: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash
  ignore_errors: true
  notify:
    - Kill all ssh connections

Как уже указывалось в комментариях .profile должно быть достаточно для установки nvm.

Просто замените задачу перезапуска sshd этой задачей:

- name: Source bash profile.
  shell: source $HOME/.profile $HOME/.bash_profile

Вы также можете взглянуть на это бродячий файл.

Если вам нужно перезапустить ssh-сервер (по какой-либо другой причине), вы можете попробовать этот подход, как описано в этом Сообщение в блоге Ansible:

- name : Install nvm
  shell: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash
  ignore_errors: true
  register: nvm_installed

- name: Kill open ssh sessions - ansible should log back in on next task
  shell: "ps -ef | grep sshd | grep `whoami` | awk '{print \"kill -9\", $2}' | sh"
  async: 0
  poll: 0
  when: nvm_installed | changed

- name: waiting for server to come back
  local_action: wait_for host={{ inventory_hostname }} state=started

- name : Install Node.js v 4.2.x
  command : nvm install v4.2

Вот что в итоге сработало:

- name : Install nvm
  shell: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash
  register: nvm_installed
  sudo: False

- name: Show nvm_installed output
  debug:
    msg: '{{nvm_installed}}'


- name : source bash profiles
  shell: source ~/.bashrc
  args:
     executable: /bin/bash
  register: sourced
  when : nvm_installed | success
  sudo: False


- name: Show sourced output
  debug:
    msg: '{{sourced}}'


- name : Install Node.js v 4.2.x
  shell : '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm install v4.2'
  when: sourced|success
  sudo: False
  environment:
    NVM_DIR: /home/vagrant/.nvm

Возможно, нет необходимости включать исходную команду, поскольку кажется, что доступ к входам в систему осуществляется с помощью неинтерактивной оболочки, поэтому содержимое .bashrc никогда не забираются.

Смотрите также https://stackoverflow.com/questions/22256884/not-possible-to-source-bashrc-with-ansible