時は大コンテナ時代の今、ansibleでnvmをインストールする需要があるのかどうか知らんが・・・
ちなみにnvmのページには
- name: nvm
shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
args:
creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"
と書いてあるが、これではrootユーザのホームディレクトリにインストールされてしまうのでrootユーザにしか使えない。全ユーザが使えるように /usr/local/nvm
以下にインストールするroleを作成してみた。
roles/nvm/tasks/main.yml
- name: clone (or fetch) nvm repository
git:
repo: "https://github.com/nvm-sh/nvm.git"
dest: "{{ nvm_root }}"
- name: checkout the latest tag of nvm
shell:
cmd: "git checkout $(git describe --abbrev=0 --tags --match 'v[0-9]*' $(git rev-list --tags --max-count=1))"
chdir: "{{ nvm_root }}"
- name: initialize nvm for login shell
copy:
src: "nvm.sh"
dest: "/etc/profile.d/nvm.sh"
- name: "check nodejs {{ nodejs_version }} is installed"
command: "bash -lc 'nvm ls --no-colors --no-alias'"
check_mode: no
ignore_errors: yes
register: installed_nodejs_versions
- name: "install nodejs {{ nodejs_version }}"
command: "bash -lc 'nvm install {{ nodejs_version }}'"
when: nodejs_version not in installed_nodejs_versions.stdout
roles/nvm/files/nvm.sh
source /usr/local/nvm/nvm.sh
roles/defaults/main.yml
nvm_root: /usr/local/nvm
nodejs_version: v16.15.0
制限事項
nvmでnodeをインストールするにはroot権限が必要である(インストールされたnodeコマンドの実行には不要)。
また、/etc/profile.d
からnvmを読み込むため、ログインシェル経由でなければnodeコマンドにパスが通らない。よって、cronや systemdからnodeアプリを起動する場合は/usr/local/nvm/versions/node/v16.15.0/bin/node
のようにフルパスで実行ファイルを指定しなければならない。