Для того, чтобы изменения вступили в силу, 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