Commit 22709861 by chalermpong

debug file

parent 1a0fb850
// .env
SALT_API_URL=http://172.28.206.50:8000
SALT_API_USERNAME=saltuser
SALT_API_PASSWORD=saltpassword
PORT=3000
\ No newline at end of file
node_modules/ # Node.js
\ No newline at end of file node_modules
...@@ -2,14 +2,10 @@ const express = require('express'); ...@@ -2,14 +2,10 @@ const express = require('express');
const bodyParser = require('body-parser'); const bodyParser = require('body-parser');
const { Salt } = require('salt-api'); const { Salt } = require('salt-api');
const controllers = require('./controller'); const controllers = require('./controller');
const routes = require('./routes')
// กำหนดค่าเชื่อมต่อs Salt Master
const salt = new Salt({
url: 'http://172.28.206.50:8000', // URL ของ Salt API ของคุณ
username: 'saltuser',
password: 'saltpassword',
});
const salt = routes.getSaltInstance()
const app = express(); const app = express();
app.use(bodyParser.json()); app.use(bodyParser.json());
...@@ -38,6 +34,7 @@ app.post('/apply-state', async (req, res) => { ...@@ -38,6 +34,7 @@ app.post('/apply-state', async (req, res) => {
salt.fun(minion, 'state.apply', { "arg": state }).then(async (data) => { salt.fun(minion, 'state.apply', { "arg": state }).then(async (data) => {
const results = data['return'][0]; const results = data['return'][0];
if (state === 'checkdirectory') { if (state === 'checkdirectory') {
await controllers.checkDirectory(results, salt); await controllers.checkDirectory(results, salt);
} else if (state === 'compose-up') { } else if (state === 'compose-up') {
...@@ -48,6 +45,8 @@ app.post('/apply-state', async (req, res) => { ...@@ -48,6 +45,8 @@ app.post('/apply-state', async (req, res) => {
await controllers.checkDockerStatus(results, salt); await controllers.checkDockerStatus(results, salt);
} else if (state === 'gitcheck') { } else if (state === 'gitcheck') {
await controllers.dockerFileStatus(results, salt); await controllers.dockerFileStatus(results, salt);
} else if (state === 'dockerps') {
return controllers.getDockerPsStatus(results, res);
} }
res.status(200).send({ message: 'Salt state applied successfully', results }); res.status(200).send({ message: 'Salt state applied successfully', results });
...@@ -102,8 +101,30 @@ app.get('/test-ping', async (req, res) => { ...@@ -102,8 +101,30 @@ app.get('/test-ping', async (req, res) => {
res.status(500).send({ error: 'Error connecting to Salt master', details: error }); res.status(500).send({ error: 'Error connecting to Salt master', details: error });
} }
}); });
app.post('/install-package', async (req, res) => {
const { minion, pkgName } = req.body;
if (!minion || !pkgName) {
return res.status(400).send({ error: 'กรุณาระบุ minion และ state ที่ต้องการรัน' });
}
try {
await salt.login();
console.log('Successfully connected to Salt master!');
salt.fun(minion, "state.apply", {"arg": ['install-package'],"kwarg": {"pillar": {"name": pkgName}}}).then(async (data) => {
const results = data['return'][0];
// console.log(results)
await controllers.install_packages(results, salt , pkgName);
}).catch(e => {
console.error(e);
res.status(500).send({ error: 'Error applying salt state', details: e });
});
return res.status(200).send({ message: 'Salt state applied successfully' });
} catch (error) {
}
})
const PORT = 3000; const PORT = process.env.PORT;
app.listen(PORT, () => { app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`); console.log(`Server is running on port ${PORT}`);
}); });
// controllers/dockerController.js
async function getDockerPsStatus(results, res) {
try {
const minion = Object.keys(results)[0]; // ได้ minion จากผลลัพธ์
const stdout = results[minion]['cmd_|-docker_ps_status_|-docker ps_|-run'].changes.stdout;
const lines = stdout.split('\n').slice(1); // แยกบรรทัดและตัด header ออก
const containerStatus = lines.map(line => {
const columns = line.split(/\s{2,}/); // แยกคอลัมน์ด้วยช่องว่างมากกว่า 2 ช่อง
return {
name: columns[columns.length - 1],
status: columns[4]
};
});
return res.status(200).send({ message: 'Salt state applied successfully', containers: containerStatus });
} catch (error) {
console.error('Error processing docker ps output:', error);
return res.status(500).send({ error: 'Error processing docker ps output', details: error });
}
}
module.exports = getDockerPsStatus
...@@ -4,12 +4,15 @@ const runDockerComposeDown = require('./runDockerComposeDown'); ...@@ -4,12 +4,15 @@ const runDockerComposeDown = require('./runDockerComposeDown');
const dockerFileStatus = require('./dockerFileStatus'); const dockerFileStatus = require('./dockerFileStatus');
const checkDirectory = require('./checkDirectory'); const checkDirectory = require('./checkDirectory');
const updateImage = require('./updateImage'); const updateImage = require('./updateImage');
const install_packages = require('./installpackages');
const getDockerPsStatus = require('./getDockerPsStatus');
module.exports = { module.exports = {
checkDockerStatus, checkDockerStatus,
runDockerComposeUp, runDockerComposeUp,
runDockerComposeDown, runDockerComposeDown,
dockerFileStatus, dockerFileStatus,
checkDirectory, checkDirectory,
updateImage updateImage,
install_packages,
getDockerPsStatus
}; };
// controller/dockerServiceStatus.js
async function install_packages(results, salt , pkgName) {
for (const minion in results) {
const result = results[minion]['pkg_|-install_packages_|-install_packages_|-installed'];
if (result.result === true) {
console.log(`Minion ${minion}: ติดตั้ง ${pkgName} สำเร็จ`);
} else {
console.log(`Minion ${minion}: ติดตั้ง ${pkgName} ไม่สำเร็จ`);
}
}
}
module.exports = install_packages;
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"": { "": {
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"dotenv": "^16.4.5",
"express": "^4.19.2", "express": "^4.19.2",
"salt-api": "^2.1.2" "salt-api": "^2.1.2"
} }
...@@ -204,6 +205,18 @@ ...@@ -204,6 +205,18 @@
"npm": "1.2.8000 || >= 1.4.16" "npm": "1.2.8000 || >= 1.4.16"
} }
}, },
"node_modules/dotenv": {
"version": "16.4.5",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/ee-first": { "node_modules/ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
......
{ {
"dependencies": { "dependencies": {
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"dotenv": "^16.4.5",
"express": "^4.19.2", "express": "^4.19.2",
"salt-api": "^2.1.2" "salt-api": "^2.1.2"
} }
......
const { Salt } = require('salt-api');
require('dotenv').config(); // โหลด environment variables
function getSaltInstance() {
return new Salt({
url: process.env.SALT_API_URL,
username: process.env.SALT_API_USERNAME,
password: process.env.SALT_API_PASSWORD,
});
}
module.exports = getSaltInstance;
const getSaltInstance = require('./getSaltInstance')
module.exports = {
getSaltInstance
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment