【问题标题】:Failing to install PM2 using NPM package on Ansible 2.7 on Debian stretch无法在 Debian 伸展的 Ansible 2.7 上使用 NPM 包安装 PM2
【发布时间】:2019-04-11 14:41:37
【问题描述】:

我正在建立一个基于 Debian 9 (stretch) 的新服务器。

我有一个 Ansible 剧本,当我尝试使用 npm ansible 模块安装 PM2 时,它失败了,我在过去几天一直被这个问题困扰。

我正在使用 ansible 2.7:

ansible 2.7.10
  config file = None
  configured module search path = ['/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.3 (default, Mar 27 2019, 09:23:15) [Clang 10.0.1 (clang-1001.0.46.3)]

我尝试在 Inventory 上使用 ansible_python_interpreter=/usr/bin/python3 运行带有 python 2 和 3 的剧本,但没有成功。

奇怪的是,如果我在服务器上 ssh 并运行npm install pm2 -g,它就可以正常工作。 Nvm 在服务器上也能正常工作。

在达到这一点之前,剧本会安装其他几个包:

  • mongodb

  • mysql 客户端

  • redis

  • 各种库

这是剧本的摘录

tasks:
     ...

     - name: Install nvm
      sudo: no
      git: repo=https://github.com/creationix/nvm.git dest=~/.nvm version={{ NVM_VERSION }}
      tags: nvm

    - name: Source nvm in ~/.profile
      sudo: no
      lineinfile: >
        dest=~/.profile
        line="source ~/.nvm/nvm.sh"
        create=yes
      tags: nvm

    - name: Install versions
      shell: bash -lc "nvm install {{ item }}"
      register: output
      changed_when: "'already installed.' not in output.stderr"
      with_items: "{{ NVM_NODE_VERSIONS }}"
      sudo: no

    - name: Set default node version to {{ NVM_DEFAULT_NODE_VERSION }}
      command: sudo -iu admin nvm alias default {{ NVM_DEFAULT_NODE_VERSION }}
      tags: nvm

    - name: Install PM2 packages
      npm:
        executable: /home/admin/.nvm/versions/node/v{{ NVM_DEFAULT_NODE_VERSION }}/bin/npm
        name: pm2
        global: yes
        state: present

....

变量定义如下:

NVM_VERSION : "v0.33.0"
NVM_INSTALL_SCRIPT : "/home/admin/nvm_install.sh"
NVM_NODE_VERSIONS :
 - v10.15.3
 - v6.9.4
 - v8.10.0
 - v8.11.1
NVM_DEFAULT_NODE_VERSION: "10.15.3"

这是我得到的错误:

{  
   "changed":false,
   "module_stderr":"Shared connection to 52.209.248.173 closed.\r\n",
   "module_stdout":"Traceback (most recent call last):\r\n  File \"/home/admin/.ansible/tmp/ansible-tmp-1554992741.43544-36230788449164/AnsiballZ_npm.py\", line 113, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/admin/.ansible/tmp/ansible-tmp-1554992741.43544-36230788449164/AnsiballZ_npm.py\", line 105, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/admin/.ansible/tmp/ansible-tmp-1554992741.43544-36230788449164/AnsiballZ_npm.py\", line 48, in invoke_module\r\n    imp.load_module('__main__', mod, module, MOD_DESC)\r\n  File \"/usr/lib/python3.5/imp.py\", line 234, in load_module\r\n    return load_source(name, filename, file)\r\n  File \"/usr/lib/python3.5/imp.py\", line 170, in load_source\r\n    module = _exec(spec, sys.modules[name])\r\n  File \"<frozen importlib._bootstrap>\", line 626, in _exec\r\n  File \"<frozen importlib._bootstrap_external>\", line 673, in exec_module\r\n  File \"<frozen importlib._bootstrap>\", line 222, in _call_with_frames_removed\r\n  File \"/tmp/ansible_npm_payload_qlnd0iyr/__main__.py\", line 284, in <module>\r\n  File \"/tmp/ansible_npm_payload_qlnd0iyr/__main__.py\", line 261, in main\r\n  File \"/tmp/ansible_npm_payload_qlnd0iyr/__main__.py\", line 185, in list\r\n  File \"/usr/lib/python3.5/json/__init__.py\", line 319, in loads\r\n    return _default_decoder.decode(s)\r\n  File \"/usr/lib/python3.5/json/decoder.py\", line 339, in decode\r\n    obj, end = self.raw_decode(s, idx=_w(s, 0).end())\r\n  File \"/usr/lib/python3.5/json/decoder.py\", line 357, in raw_decode\r\n    raise JSONDecodeError(\"Expecting value\", s, err.value) from None\r\njson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)\r\n",
   "msg":"MODULE FAILURE\nSee stdout/stderr for the exact error",
   "rc":1
}

更清晰的错误:

    MODULE FAILURE
    See stdout/stderr for the exact error

    MODULE_STDOUT:

    Traceback (most recent call last):
      File "/home/admin/.ansible/tmp/ansible-tmp-1555331069.891913-182901060644739/AnsiballZ_npm.py", line 113, in <module>
        _ansiballz_main()
      File "/home/admin/.ansible/tmp/ansible-tmp-1555331069.891913-182901060644739/AnsiballZ_npm.py", line 105, in _ansiballz_main
        invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
      File "/home/admin/.ansible/tmp/ansible-tmp-1555331069.891913-182901060644739/AnsiballZ_npm.py", line 48, in invoke_module
        imp.load_module('__main__', mod, module, MOD_DESC)
      File "/usr/lib/python3.5/imp.py", line 234, in load_module
        return load_source(name, filename, file)
      File "/usr/lib/python3.5/imp.py", line 170, in load_source
        module = _exec(spec, sys.modules[name])
      File "<frozen importlib._bootstrap>", line 626, in _exec
      File "<frozen importlib._bootstrap_external>", line 673, in exec_module
      File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
      File "/tmp/ansible_npm_payload_qvtn2qwx/__main__.py", line 284, in <module>
      File "/tmp/ansible_npm_payload_qvtn2qwx/__main__.py", line 261, in main
      File "/tmp/ansible_npm_payload_qvtn2qwx/__main__.py", line 185, in list
      File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
        raise JSONDecodeError("Expecting value", s, err.value) from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    MODULE_STDERR:

    OpenSSH_7.9p1, LibreSSL 2.7.3
    debug1: Reading configuration data ~/.ssh/config
    debug1: ~/.ssh/config line 13: Applying options for *
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: /etc/ssh/ssh_config line 48: Applying options for *
    debug2: resolve_canonicalize: hostname <ip> is address
    debug1: auto-mux: Trying existing master
    debug2: fd 3 setting O_NONBLOCK
    debug2: mux_client_hello_exchange: master version 4
    debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
    debug3: mux_client_request_session: entering
    debug3: mux_client_request_alive: entering
    debug3: mux_client_request_alive: done pid = 16293
    debug3: mux_client_request_session: session request sent
    debug3: mux_client_read_packet: read header failed: Broken pipe
    debug2: Received exit status from master 1
    Shared connection to <ip> closed.

任何帮助将不胜感激。

【问题讨论】:

  • executable: "/home/admin/.nvm/versions/node/v{{ NVM_DEFAULT_NODE_VERSION }}/bin/npm" --> 在引号内试试
  • @error404 感谢您的建议,我尝试使用引号,但不幸的是它不起作用。
  • 你能用完整的调试日志更新问题吗?只是想了解如果剧本失败则执行哪些任务
  • @error404 执行失败:“安装 PM2 包”是剧本摘录中的最后一个任务。你想看什么日志?服务器上 nvm 已正确安装在服务器上,默认版本是预期版本。
  • @kaiserbadl0 我要求调试日志的原因是因为我无法将 json 错误与 npm 模块相关联。我刚刚执行了相同的模块来安装 pm2 已成功安装,但我只有一个 npm 版本我同时安装多个版本,因为 pm2 模块具有默认节点版本,您可以删除 executable 关键字并试一试

标签: ansible


【解决方案1】:

安装全局版本的node已经解决了这个问题。

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多