Возможна установка JsReport на CentOS 7 - PullRequest
0 голосов
/ 19 апреля 2019

Мне трудно написать ANSI-скрипт для установки JsReport на CentOS 7. Я пытаюсь перевести эти операции: https://jsreport.net/learn/centos

в ответный сценарий.

То, что я пробовал до сих пор:

- hosts: localhost
  tasks:
  - name: install wget
    yum:
      name: wget
      state: latest      
  - name: download nvm
    get_url: url=https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh  dest=/opt/nvm-install.sh 
  - name: Changing perm of "/opt/nvm-install.sh", adding "+x"
    file: dest=/opt/nvm-install.sh mode=a+x
  - name: Execute the script
    command: sh /opt/nvm-install.sh
  - name: Changing perm of "~/.nvm/nvm.sh", adding "+x"
    file: dest=~/.nvm/nvm.sh mode=a+x   

  - name: Make nvm command work in current terminal, Install node and set version, npm install jsreport-cli 
    shell: |
      source ~/.nvm/nvm.sh
      nvm install 8.11.3 
      npm install jsreport-cli -g
      mkdir jsreportapp
      jsreportapp
      jsreport init
      jsreport configure


  - name: download install-google-chrome.sh
    get_url: url=https://intoli.com/install-google-chrome.sh  dest=/opt/install-google-chrome.sh
  - name: Changing perm of "/opt/install-google-chrome.sh", adding "+x"
    file: dest=/opt/install-google-chrome.sh mode=a+x   
  - name: Execute the script
    command: sh /opt/install-google-chrome.sh

Обычно я запускаю ansible скрипты с помощью следующей команды:

sudo ansible-playbook install_jsreport.yml

Я не уверен, что хорошей практикой является использование sudo здесь, или я должен использовать shell здесь?

В приведенном выше скрипте я получаю следующую ошибку:

фатально: [localhost]: СБОЙ! => {"change": true, "cmd": "source ~ / .nvm / nvm.sh \ n nvm install 8.11.3 \ n npm install jsreport-cli -g \ n mkdir jsreportapp \ n jsreportapp \ n jsreport init \ n jsreport configure ", "delta": "0: 01: 03.627957", "end": "2019-04-19 15: 22: 26.374742", "msg": «ненулевой код возврата», «rc»: -2, «start»: «2019-04-19 15: 21: 22.746785 "," stderr ":" v8.11.3 уже установлена. \ Nmkdir: невозможно создать каталог "jsreportapp": файл существует \ n / bin / sh: строка 4: jsreportapp: команда не найдена \ nНеожиданная ошибка: команда ошибка: npm i -S jsreport \ nsh: узел: команда не найдена \ nnpm ПРЕДУПРЕЖДЕНИЕ pdfjs-dist@2.0.489 требует однорангового узла webpack@^2.0.0 || ^ 3.0.0 но ни один не установлен. Вы должны установить одноранговые зависимости самостоятельно. \ Nnpm WARN worker-loader@1.1.1 требует однорангового webpack@^2.0.0 || ^ 3.0.0 || ^ 4.0.0 но ни один не установлен. Вы должны установить одноранговые зависимости себя. \ nnpm WARN jsreport-server @ Нет описания \ nnpm WARN jsreport-server @ Нет поля репозитория. \ nnpm ПРЕДУПРЕЖДЕНИЕ jsreport-server @ No поле лицензии. \ nnpm ПРЕДУПРЕЖДЕНИЕ необязательно Пропуск ОПЦИОНАЛЬНАЯ ЗАВИСИМОСТЬ: fsevents@1.2.8 (node_modules / fsevents): \ nnpm WARN notsup Пропуск ДОПОЛНИТЕЛЬНАЯ ЗАВИСИМОСТЬ: неподдерживаемая платформа для fsevents@1.2.8: требуется {\ "os \": \ "darwin \", \ "arch \": \ "any \"} (текущий: {\ "os \": \ "linux \", \ "arch \": \ "x64 \"}) \ n \ nnpm ERR! файл sh \ nnpm ERR! код ELIFECYCLE \ nnpm ERR! errno ENOENT \ nnpm ERR! порождение системного вызова \ nnpm ERR! puppeteer@1.12.2 установить: node install.js \ nnpm ERR! порождать ENOENT \ nnpm ERR! \ nnpm ERR! Ошибка при установке puppeteer@1.12.2 скрипт. \ nnpm ERR! Это, вероятно, не проблема с npm. Есть Вероятно, дополнительные записи журнала выше. \ n \ nnpm ERR! Полный журнал этот прогон можно найти в: \ nnpm ERR!
/root/.npm/_logs/2019-04-19T13_22_24_770Z-debug.log\n (1). \ ncaused by ошибка (1) -> мета = {\ "kill \": false, \ "code \": 1, \ "signal \": null, \ "cmd \": \ "npm i -S jsreport \ "}, stack = Ошибка: \ n в ChildProcess.exithandler (child_process.js: 275: 12) \ n в emitTwo (events.js: 126: 13) \ n в ChildProcess.emit (events.js: 214: 7) \ n в MaybeClose (internal / child_process.js: 925: 16) \ n в Process.ChildProcess._handle.onexit (internal / child_process.js: 209: 5) "," stderr_lines ": [" v8.11.3 is уже установлен. "," mkdir: не может создать каталог "jsreportapp": Файл существует "," / bin / sh: строка 4: jsreportapp: команда не найдена ", «Произошла непредвиденная ошибка: сбой команды: npm i -S jsreport», «sh: узел: команда не найдена "," npm WARN pdfjs-dist@2.0.489 требует однорангового узла webpack@^2.0.0 || ^ 3.0.0 но ни один не установлен. Вы должны установить сами по себе. "," npm WARN worker-loader@1.1.1 требует пэр webpack@^2.0.0 || ^ 3.0.0 || ^ 4.0.0 но ни один не установлен. Вы Вы должны установить одноранговые зависимости самостоятельно. "," npm WARN jsreport-server @ Нет описания "," npm WARN jsreport-server @ Нет поля репозитория. ", "npm WARN jsreport-server @ Нет поля лицензии.", "npm WARN необязательно Пропуск необязательной зависимости: fsevents@1.2.8 (node_modules / fsevents): "," npm WARN notsup Пропуск необязательно ЗАВИСИМОСТЬ: неподдерживаемая платформа для fsevents@1.2.8: требуется {\ "os \": \ "darwin \", \ "arch \": \ "any \"} (текущий: {\ "os \": \ "linux \", \ "arch \": \ "x64 \"}) "," "," npm ERR! файл sh "," npm ERR! код ELIFECYCLE "," npm ERR! errno ENOENT "," npm ERR! Системный вызов spawn "," npm ERR! puppeteer@1.12.2 установить: node install.js "," npm ERR! spawn ENOENT "," npm ERR! "," npm ERR! Не удалось на puppeteer@1.12.2 установить скрипт. "," npm ERR! Это, вероятно, не probleм с нпм.Скорее всего, выше выводится логирование. "," "," Npm ERR!Полный журнал этого прогона можно найти в: "," npm ERR!/root/.npm/_logs/2019-04-19T13_22_24_770Z-debug.log "," (1)."," вызвано ошибкой (1) -> meta = {\ "kill \": false, \ "code \": 1, \ "signal \": null, \ "cmd \": \ "npm i -Sjsreport \ "}, stack = Error:", "at ChildProcess.exithandler (child_process.js: 275: 12)", "at emitTwo (events.js: 126: 13)", "
at ChildProcess.emit (events.js: 214: 7) "," at MaybeClose (internal / child_process.js: 925: 16) "," at Process.ChildProcess._handle.onexit (internal / child_process.js: 209: 5) "],"stdout ":" Теперь используется узел v8.11.3 (npm v5.6.0) \ n / root / .nvm / версии / node / v8.11.3 / bin / jsreport -> /root/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/cli.js\n+ jsreport-cli@2.0.6 \ nadded 333 пакета в 16.187s \ njsreport Установка не найдена, установка последней версии jsreport сейчас, подождите немного ... \ n?Вы хотите включить веб-сервер?(Да / Нет) \ u001b [42D \ u001b [42C "," stdout_lines ": [" Теперь используется узел v8.11.3 (npm v5.6.0) "," /root/.nvm/versions/node/v8.11.3/bin / jsreport -> /root/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/cli.js "," + jsreport-cli@2.0.6 "," добавил 333 пакета в 16.187 с."," Установка jsreport не найдена, установка последней версии jsreport, подождите ... ","?Вы хотите включить веб-сервер?(Да / Нет) \ u001b [42D \ u001b [42C "]}

РЕДАКТИРОВАТЬ (относительно ответа жаворонка):

ЗАДАЧА [initкаталог jsreportapp] ************************************************************************************************************* роковая: [localhost]: FAILED! => {"change": true, "cmd": ".~ / .nvm / nvm.sh \ n jsreport init "," delta ":" 0: 00: 46.367234 "," end ":" 2019-04-23 10: 12: 46.142142 "," msg ":" non-нулевой код возврата "," rc ": 1," start ":" 2019-04-23 10: 11: 59.774908 "," stderr ":" Произошла непредвиденная ошибка: команда не выполнена: npm i -S jsreport \ nsh: узел:команда не найдена \ nnpm ПРЕДУПРЕЖДЕНИЕ pdfjs-dist@2.0.489 требуется одноранговый узел webpack@^2.0.0 ||^ 3.0.0 но ни один не установлен.Вы должны установить одноранговые зависимости самостоятельно. \ Nnpm WARN worker-loader@1.1.1 требует однорангового узла webpack@^2.0.0 ||^ 3.0.0 ||^ 4.0.0 но ни один не установлен.Вы должны сами установить зависимости между равноправными узлами. \ Nnpm ПРЕДУПРЕЖДЕНИЕ jsreport-server @ Нет описания \ nnpm WARN jsreport-server @ Нет поля репозитория. \ Nnpm WARN jsreport-server @ Нет поля лицензии. \ Nnpm WARN необязательно ПЕРЕДАЧА ДОПОЛНИТЕЛЬНАЯ ЗАВИСИМОСТЬ: fsevents@1.2.8 (node_modules / fsevents): \ nnpm WARN notsup Пропуск необязательной зависимости: неподдерживаемая платформа для fsevents@1.2.8: wanted {\ "os \": \ "darwin \", \ "arch \": \ "any \"}(текущий: {\ "os \": \ "linux \", \ "arch \": \ "x64 \"}) \ n \ nnpm ERR!файл sh \ nnpm ERR!код ELIFECYCLE \ nnpm ERR!errno ENOENT \ nnpm ERR!порождение системного вызова \ nnpm ERR!puppeteer@1.12.2 установить: node install.js \ nnpm ERR!spawn ENOENT \ nnpm ERR!\ nnpm ERR!Ошибка при установке сценария puppeteer@1.12.2. \ Nnpm ERR!Это, вероятно, не проблема с npm.Вероятно, есть дополнительные выходные данные журнала. \ N \ nnpm ERR!Полный журнал этого прогона можно найти в: \ nnpm ERR!
/root/.npm/_logs/2019-04-23T08_12_46_089Z-debug.log\n (1).\ ncaused по ошибке (1) -> meta = {\ "kill \": false, \ "code \": 1, \ "signal \": null, \ "cmd \": \ "npm i -S jsreport \"}, stack = Ошибка: \ n в ChildProcess.exithandler (child_process.js: 275: 12) \ n в emitTwo (events.js: 126: 13) \ n в ChildProcess.emit (events.js: 214: 7)\ n в MaybeClose (внутренняя / child_process.js: 925: 16) \ n в Socket.stream.socket.on (внутренняя / child_process.js: 346: 11) \ n в emitOne (events.js: 116: 13) \n в Socket.emit (events.js: 211: 7) \ n в Pipe._handle.close [as _onclose] (net.js: 557: 12) "," stderr_lines ": [" Произошла непредвиденная ошибка: Команда не выполнена:npm i -S jsreport "," sh: узел: команда не найдена "," npm WARN pdfjs-dist@2.0.489 требуется одноранговый узел webpack@^2.0.0 ||^ 3.0.0 но ни один не установлен.Вы должны установитьсами по себе. "," npm WARN worker-loader@1.1.1 требует однорангового узла webpack@^2.0.0 ||^ 3.0.0 ||^ 4.0.0 но ни один не установлен.Вы должны установить одноранговые зависимости самостоятельно. "," Npm WARN jsreport-server @ No description "," npm WARN jsreport-server @ Нет поля репозитория. "," Npm WARN jsreport-server @ Нет поля лицензии. "," Npm WARN необязательноПропускание необязательной зависимости: fsevents@1.2.8 (node_modules / fsevents): "," npm WARN notsup Пропускание опциональной зависимости: неподдерживаемая платформа для fsevents@1.2.8: wanted {\ "os \": \ "darwin \", \ "arch \ ": \" any \ "} (текущий: {\" os \ ": \" linux \ ", \" arch \ ": \" x64 \ "})", "", "npm ERR!файл sh "," npm ERR!код ELIFECYCLE "," npm ERR!errno ENOENT "," npm ERR!вызов syscall "," npm ERR!puppeteer@1.12.2 установить: node install.js "," npm ERR!spawn ENOENT "," npm ERR!"," npm ERR!Не удалось выполнить скрипт установки puppeteer@1.12.2. "," Npm ERR!Это, вероятно, не проблема с npm.Скорее всего, выше выводится логирование. "," "," Npm ERR!Полный журнал этого прогона можно найти в: "," npm ERR!/root/.npm/_logs/2019-04-23T08_12_46_089Z-debug.log "," (1)."," вызвано ошибкой (1) -> meta = {\ "kill \": false, \ "code \": 1, \ "signal \": null, \ "cmd \": \ "npm i -Sjsreport \ "}, stack = Error:", "at ChildProcess.exithandler (child_process.js: 275: 12)", "at emitTwo (events.js: 126: 13)", "
at ChildProcess.emit (events.js: 214: 7) "," at MaybeClose (internal / child_process.js: 925: 16) "," at Socket.stream.socket.on (internal / child_process.js: 346: 11) "," atemitOne (events.js: 116: 13) "," в Socket.emit (events.js: 211: 7) "," в Pipe._handle.close [as _onclose] (net.js: 557: 12) "], "stdout": "Установка jsreport не найдена, установка последней версии jsreport сейчас, подождите ...", "stdout_lines": ["Установка jsreport не найдена, установка последней версии jsreport сейчас, подождите ..."]}

EDIT2:

После удаления temp и выполнения этих команд на локальном хосте:

sudo chmod 777 -R jsReport/
npm install puppeteer jsreport-chrome-pdf

И после запуска вашегоplaybook с sudo работал без ошибок.

Редактировать 3:

Добавление:

- name: install puppeteer 
  shell: |
    . ~/.nvm/nvm.sh
    npm install puppeteer  -g
  args:
    creates: "~/.nvm/versions/node/v{{ node_version }}/lib/node_modules/puppeteer "        

выдает следующую ошибку:

ЗАДАЧА [установить кукловода] ********************************************************************************************************************************************************************************************** роковой=> {"change": true, "cmd": ". ~ / .nvm / nvm.sh \ n npm install puppeteer -g", "delta": "0: 00: 04.178220", "end": "2019-04-23 11: 39: 44.413525 "," msg ":" ненулевой код возврата "," rc ": 1," start ":" 2019-04-23 11: 39: 40.235305 "," stderr ":"sh: node: команда не найдена \ nnpm ERR! файл sh \ nnpm ERR! code ELIFECYCLE \ nnpm ERR! errno ENOENT \ nnpm ERR! spyscall spawn \ nnpm ERR! puppeteer@1.14.0 install: node install.js \ nnpm ERR!spawn ENOENT \ nnpm ERR! \ nnpm ERR! Сбой при установке сценария puppeteer@1.14.0. \ nnpm ERR! Вероятно, это не проблема с npm. Вероятно, имеется дополнительный вывод журнала выше. \ n \ nnpm ERR! Завершеножурнал этого прогона можно найти в: \ nnpm ERR!
/root/.npm/_logs/2019-04-23T09_39_44_391Z-debug.log "," stderr_lines ": [" sh: node: команда не найдена ",«npm ERR! file sh», «npm ERR! code ELIFECYCLE», «npm ERR! errno ENOENT», «npm ERR! syscall spawn», «npm ERR! puppeteer@1.14.0 install: node install.js», «npmERR! Spawn ENOENT "," npm ERR! "," Npm ERR! Ошибка при установке сценария puppeteer@1.14.0. "," NpmERR!Это, вероятно, не проблема с npm.Скорее всего, выше выводится логирование. "," "," Npm ERR!Полный журнал этого прогона можно найти в: "," npm ERR!
/root/.npm/_logs/2019-04-23T09_39_44_391Z-debug.log "]," stdout ":" \ n> puppeteer @1.14.0 install /root/.nvm/versions/node/v8.11.3/lib/node_modules/puppeteer\n> узел install.js "," stdout_lines ": [" ","> puppeteer@1.14.0 install / root/.nvm/versions/node/v8.11.3/lib/node_modules/puppeteer ","> узелinstall.js "]}

EDIT4:

Я пробовал что-то вроде этого:

---
- hosts: localhost
  vars:
    node_version: 8.11.3
    nvm_version: 0.33.11

  tasks:

    - name: Add the user 'jsreport'
      user:
        name: jsreport
        system: true  

    - name: install wget
      yum:
        name: wget
        state: latest
      become: true
      become_user: jsreport   

    - name: download nvm
      get_url:
        url: "https://raw.githubusercontent.com/creationix/nvm/v{{ nvm_version }}/install.sh"
        dest: /opt/nvm-install.sh
      become: true
      become_user: jsreport    

    - name: Changing perm of "/opt/nvm-install.sh", adding "+x"
      file:
        dest: /opt/nvm-install.sh
        mode: "a+x"
      become: true
      become_user: jsreport  

    - name: Execute the script
      command: /opt/nvm-install.sh
      args:
        creates: ~/.nvm/nvm.sh
      become: true
      become_user: jsreport  

    - name: Changing perm of "~/.nvm/nvm.sh", adding "+x"
      file:
        dest: ~/.nvm/nvm.sh
        mode: "a+x"
      become: true
      become_user: jsreport  

    - name: install node
      shell: |
        . ~/.nvm/nvm.sh
        nvm install {{ node_version }}
      args:
        creates: "~/.nvm/versions/node/v{{ node_version }}"
      become: true
      become_user: jsreport  

    - name: install jsreport-cli
      shell: |
        . ~/.nvm/nvm.sh
        npm install jsreport-cli -g
      args:
        creates: "~/.nvm/versions/node/v{{ node_version }}/lib/node_modules/jsreport-cli"
      become: true
      become_user: jsreport  


    - name: install jsreport-chrome-pdf
      shell: |
        . ~/.nvm/nvm.sh
        npm install jsreport-chrome-pdf -g
      args:
        creates: "~/.nvm/versions/node/v{{ node_version }}/lib/node_modules/jsreport-chrome-pdf"       
      become: true
      become_user: jsreport  


    - name: install puppeteer 
      shell: |
        . ~/.nvm/nvm.sh
        npm install puppeteer  -g
      become: true
      become_user: jsreport  
      args:
        creates: "~.nvm/versions/node/v{{ node_version }}/lib/node_modules/puppeteer "    

    - name: create jsreportapp directory
      file:
        path: ./jsreportapp
        state: directory
      become: true
      become_user: jsreport  


    - name: init jsreportapp directory
      shell: |
        . ~/.nvm/nvm.sh
        jsreport init
      args:
        chdir: ./jsreportapp
        creates: ./package-lock.json
      become: true
      become_user: jsreport  

потом, когда я нахожусь на пользователе jsreport Я запускаю команду jsreport configure Затем я отредактировал этот конфиг, чтобы установить:

"chrome": {"launchOptions": { "args": ["--no-sandbox"]}}

Затем я запускаю jsreport start и получаю сообщение об ошибке:

Не удалось найти установку jsreport, необходимую для проверки команда доступна, если команда действительна, попробуйте установить jsreport первый. (1). вызвано ошибкой (1) -> stack = Error: на Promise (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/instanceHandler.js:55:21) на новом Promise () в Object.find (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/instanceHandler.js:47:10) в getInstance (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/commander.js:768:10) в файле export.handler (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/commands/start.js:56:5) в Commander.executeCommand (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/commander.js:389:28) в Object.handler (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/commander.js:559:16) в Object.self.runCommand (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/node_modules/yargs/lib/command.js:170:22) в parseArgs (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/node_modules/yargs/yargs.js:920:28) в Object.Yargs.self.parse (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/node_modules/yargs/yargs.js:499:18)

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Основная проблема заключается в том, что команда jsreport configure является интерактивной. Если бы вы запустили его вручную, вы бы увидели:

$ jsreport configure
? Do you want to enable web server? (Y/n)     

Но если вы запустите эту команду без подключенного терминала (именно так ее запускает Ansible), она завершится с ненулевым кодом выхода:

[root@365f191cdad1 ~]# jsreport configure < /dev/null 
? Do you want to enable web server? (Y/n) 
[root@365f191cdad1 ~]# echo $?
130

Поскольку это последняя команда в вашем сценарии оболочки, она становится кодом выхода вашего сценария оболочки. Поскольку ваш сценарий оболочки завершается с ошибкой, отличной от нуля, Ansible считает задачу неуспешной и прерывает playbook.

Если бы вы удалили вызов на jsreport configure, ваша книга воспроизведения сработала бы почти , за исключением того, что в вашем скрипте есть опечатка. У вас есть:

  mkdir jsreportapp
  jsreportapp

Я думаю, что вам не хватает cd там:

  mkdir jsreportapp
  cd jsreportapp

Другими словами, это работает без ошибок:

- hosts: localhost
  tasks:
  - name: install wget
    yum:
      name: wget
      state: latest      
  - name: download nvm
    get_url: url=https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh  dest=/opt/nvm-install.sh 
  - name: Changing perm of "/opt/nvm-install.sh", adding "+x"
    file: dest=/opt/nvm-install.sh mode=a+x
  - name: Execute the script
    command: sh /opt/nvm-install.sh
  - name: Changing perm of "~/.nvm/nvm.sh", adding "+x"
    file: dest=~/.nvm/nvm.sh mode=a+x   
  - name: Make nvm command work in current terminal, Install node and set version, npm install jsreport-cli 
    shell: |
      source ~/.nvm/nvm.sh
      nvm install 8.11.3 
      npm install jsreport-cli -g
      mkdir jsreportapp
      cd jsreportapp
      jsreport init

Но есть еще ряд вещей, которые стоит исправить. Во-первых, вы получаете сообщение об ошибке mkdir jsreportapp, которое завершается ошибкой, если каталог уже существует. Вместо этого вы могли бы позвонить mkdir -p, но, вероятно, лучше перенести это в отдельное задание, а затем разбить ваше окончательное задание в соответствии с предложением OmPrakashP:

- name: install node
  shell: |
    . ~/.nvm/nvm.sh
    nvm install 8.11.3

- name: install jsreport-cli
  shell: |
    . ~/.nvm/nvm.sh
    npm install jsreport-cli -g

- name: create jsreportapp directory
  file:
    path: ./jsreportapp
    state: directory

- name: init jsreportapp directory
  shell: |
    . ~/.nvm/nvm.sh
    jsreport init
  args:
    chdir: ./jsreportapp

Вместо того, чтобы запускать jsreport configure, которая является интерактивной командой, рассмотрите возможность просто скопировать соответствующую jsreport.config.json с помощью задачи Ansible copy или шаблонизировать ее с помощью модуля template, если вы хотите установить вещи динамически как часть запуска playbook.

Моя последняя пьеса - включая некоторые незначительные стилистические изменения (всегда используйте синтаксис yaml для параметров модуля, а не ключ = значение) и некоторые изменения идемпотентности (избегайте повторного запуска задач установки и т. Д.) - выглядит следующим образом:

---
- hosts: localhost
  vars:
    node_version: 8.11.3
    nvm_version: 0.33.11

  tasks:

    - name: install wget
      become: true
      yum:
        name: wget
        state: latest

    - name: download nvm
      get_url:
        url: https://raw.githubusercontent.com/creationix/nvm/v{{ nvm_version }}/install.sh
        dest: ~/nvm-install.sh

    - name: Changing perm of "/opt/nvm-install.sh", adding "+x"
      file:
        dest: ~/nvm-install.sh
        mode: "a+x"

    - name: Execute the script
      command: ~/nvm-install.sh
      args:
        creates: ~/.nvm/nvm.sh

    - name: Changing perm of "~/.nvm/nvm.sh", adding "+x"
      file:
        dest: ~/.nvm/nvm.sh
        mode: "a+x"

    - name: install node
      shell: |
        . ~/.nvm/nvm.sh
        nvm install {{ node_version }}
      args:
        creates: "~/.nvm/versions/node/v{{ node_version }}"

    - name: install jsreport-cli
      shell: |
        . ~/.nvm/nvm.sh
        npm install jsreport-cli -g
      args:
        creates: "~/.nvm/versions/node/v{{ node_version }}/lib/node_modules/jsreport-cli"

    - name: create jsreportapp directory
      file:
        path: ./jsreportapp
        state: directory

    - name: init jsreportapp directory
      shell: |
        . ~/.nvm/nvm.sh
        jsreport init
      args:
        chdir: ./jsreportapp
        creates: ./package-lock.json

Вы можете найти вышеприведенный список игр в этом хранилище .

Обновление

Я отредактировал playbook, чтобы он успешно работал как пользователь без полномочий root. Это включало (а) добавление become: true в задачу установки wget и (б) установку nvm-install.sh в текущий домашний каталог пользователя, а не /opt.

Вы можете видеть, что это успешно работает как пользователь без полномочий root здесь:

И успешно работает во второй раз:

Как видите, ошибки, о которых вы сообщаете, не возникают и, скорее всего, имеют отношение к вашей среде. Вы можете попробовать запустить новую систему.

Перед запуском jsreport start, помните, что вам нужно получить исходный код в скрипте ~/.nvm/nvm.sh. Если вы сделаете это, похоже, что он успешно работает:

0 голосов
/ 20 апреля 2019

Ваша игра заканчивается на стадии ниже

    shell: |
      source ~/.nvm/nvm.sh
      nvm install 8.11.3 
      npm install jsreport-cli -g
      mkdir jsreportapp
      jsreportapp
      jsreport init
      jsreport configure

Вы можете разбить его дальше на несколько задач.

Вот что вы должны попробовать в первую очередь https://github.com/geerlingguy/ansible-role-nodejs

Также ознакомьтесь с этим руководством для установки модуля узла https://docs.ansible.com/ansible/latest/modules/npm_module.html

...