Мне трудно написать сценарий ansible для установки 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
Обычно я запускаю доступные скрипты следующей командой:
sudo ansible-playbook install_jsreport.yml
Я не уверен, что использовать sudo
здесь - это хорошая практика, или мне нужно использовать здесь shell
?
В приведенном выше сценарии я получаю следующую ошибку:
РЕДАКТИРОВАТЬ (относительно ответа Ларска):
РЕДАКТИРОВАТЬ2:
После удаления
temp
и выполнения этих команд на localhost:
И после запуска вашей playbook с sudo он работал без ошибок.
Изменить 3:
sudo chmod 777 -R jsReport/
npm install puppeteer jsreport-chrome-pdf
Добавление:
дает следующую ошибку:
ЗАДАЧА [установить кукловод] ******************************************** ************************************************ ************************************************* ******************************************* фатальный: [localhost] : НЕ СМОГЛИ! => {"изменено": 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! file sh \ nnpm ERR! code ELIFECYCLE \ nnpm ERR! errno ENOENT \ nnpm ERR! syscall spawn \ nnpm ERR! [email protected] install: node install.js
\ nnpm ERR! spawn ENOENT \ nnpm ERR! \ nnpm ERR! Не удалось выполнить скрипт установки [email protected]. \ nnpm ERR! Вероятно, это не проблема с npm. Вероятно, выше имеется дополнительный вывод журнала. \ n \ nnpm ERR! Полный журнал этот запуск можно найти в: \ nnpm ERR!
/root/.npm/_logs/2019-04-23T09_39_44_391Z-debug.log "," stderr_lines ": [" sh: node: command not found "," npm ERR! File sh »,« npm ERR! Code ELIFECYCLE »,« npm ERR! Errno ENOENT »,« npm ERR! Syscall spawn »,« npm ERR! [email protected] install: node install.js
»,« npm ERR! Spawn ENOENT » "," npm ERR! "," npm ERR! Ошибка на [email protected]. 0 сценарий установки. "," Npm ERR! Вероятно, это не проблема npm. Вероятно, выше имеется дополнительный вывод журнала. "," "," Npm ERR! Полный журнал этого запуска можно найти в: "," npm ERR!
/root/.npm/_logs/2019-04-23T09_39_44_391Z-debug.log "]," stdout ":" \ n> puppeteer @ 1.14.0 установить /root/.nvm/versions/node/v8.11.3/lib/node_modules/puppeteer\n> node install.js "," stdout_lines ": [" ","> [email protected] install / root /.nvm/versions/node/v8.11.3/lib/node_modules/puppeteer ","> node install.js "]}
- name: install puppeteer
shell: |
. ~/.nvm/nvm.sh
npm install puppeteer -g
args:
creates: "~/.nvm/versions/node/v{{ node_version }}/lib/node_modules/puppeteer "
РЕДАКТИРОВАТЬ4:
Я пробовал примерно так:
потом, когда я нахожусь на пользователе jsreport
, я запускаю команду jsreport configure
Затем я отредактировал эту конфигурацию, чтобы установить:
"chrome": {"launchOptions": {"args": ["--no-sandbox"]}}
---
- 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 start
и получаю сообщение об ошибке:
Не удалось найти установку jsreport, необходимую для проверки доступности команды, если команда действительна, попробуйте сначала установить jsreport. (1). вызвано ошибкой (1) -> stack = Error: at Promise (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/instanceHandler.js:55:21) в new Promise () в Object.find (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/instanceHandler.js:47:10) в getInstance em> (/home/jsreport/.nvm/versions/node/v8.11.3/lib/node_modules/jsreport-cli/lib/commander.js:768:10) в exports.handler (/home/jsreport/.nvm/ версии / 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)
Основная проблема здесь в том, что команда
- 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), она завершится ошибкой с ненулевым кодом выхода: