時は大コンテナ時代の今、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
のようにフルパスで実行ファイルを指定しなければならない。