Я создаю онлайн-документацию на основе уценки, используя Hexo, но я хочу расширить ее возможности, отображая команды вывода сетевых устройств.
Чтобы быть более ясным, вместо того, чтобы копировать и вставлять команду и ее результат в кодовый блок, я хочу получить результат с помощью http перед рендерингом страницы.
Я уже запрограммировал программное обеспечение, отвечающее за выполнение нужной команды и предоставление ее результата на веб-сервере.
Все, что он делает, это отправляет строку, содержащую результат. Это просто текст.
Все, что я хочу, это отобразить этот результат на странице с помощью подключаемого модуля шестнадцатеричного тега.
Сейчас я действительно нахожусь на стадии разработки, поэтому использую только тему по умолчанию («пейзаж»). Поскольку я работаю над старой версией Arch Linux (4.19.8-arch1-1-ARCH
), я использую Docker.
Файловая структура внутри контейнера:
.
|-- _config.yml
|-- package.json
|-- scaffolds
| |-- draft.md
| |-- page.md
| `-- post.md
|-- scripts
| `-- index.js
|-- source
| `-- _posts
| `-- hello-world.md
`-- themes
Докерфайл
FROM node:8.11.2
WORKDIR /gtd
ADD . .
RUN npm install hexo-cli -g
RUN npm install hexo-server --save
RUN npm install node-fetch --save
RUN npm install
CMD ["hexo", "server"]
Привет-мир.md
{% cli_exporter "output" "show_version" "some_router" %}
Пользовательский плагин (scripts/index.js)
const fetch = require("node-fetch");
hexo.extend.tag.register("cli_exporter", (args) => {
const hostname = "XX.YYY.ZZZ.WW:XXXX"
let endpoint, module, target
[endpoint, module, target] = args
const url = "http://" + hostname + '/' + endpoint
+ "?module=" + module + "&target=" + target
fetch(url)
.then(response => {
if (response.ok) {
return response.text()
.then(data => "<div>" + data + "</div>")
.catch(error => console.error(error))
}
return Promise.reject(new Error("response failed"))
})
.catch(error => Promise.reject(new Error(error.message)))
}, {async: true});
Я действительно не могу дать вам настоящее имя хоста, так как это частное программное обеспечение, но на самом деле это просто текст.
Допустим, я хочу получить результат show version
от маршрутизатора Cisco. Если я console.log(data)
в плагине, я получаю ожидаемый результат. Но это не отображается на сгенерированном веб-сайте.