Commit 74755692 authored by Ahmad Nemati's avatar Ahmad Nemati

init

parent 44fa5b78
...@@ -63,6 +63,34 @@ class Hetzner { ...@@ -63,6 +63,34 @@ class Hetzner {
} }
getAllSnapShots() {
return new Promise(function (resolve, reject) {
client.images.list().then(function (res) {
// console.log(res)
let images = _.values(res.images);
images.sort(function compare(a, b) {
var dateA = new Date(a.created);
var dateB = new Date(b.created);
return dateB - dateA;
});
for (let i = 0; i < images.length; i++) {
if (images[i].status === 'available' && images[i].type === 'snapshot')
resolve(images[i].id)
}
reject(false)
})
})
}
getAllFloatingIps() { getAllFloatingIps() {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
...@@ -193,12 +221,19 @@ class Hetzner { ...@@ -193,12 +221,19 @@ class Hetzner {
} }
async createServerWithSnap(region) {
let servername = await this.getAllSnapShots()
console.log(servername)
return await this.createServer(region, servername)
createServer(region, newGeneration) { }
createServer(region, servername) {
let rand = randomInt(0, words.length) let rand = this.randomInt(0, words.length)
rand=words[rand]
console.log(rand)
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
let command = newG let command = newG
...@@ -208,8 +243,7 @@ class Hetzner { ...@@ -208,8 +243,7 @@ class Hetzner {
client.servers.build(rand) client.servers.build(rand)
.serverType('cx51') .serverType('cx51')
.location(region) .location(region)
.userData(command) .image(servername)
.image('ubuntu-18.04')
.create() .create()
.then(function (response) { .then(function (response) {
resolve(response) resolve(response)
...@@ -258,7 +292,7 @@ class Hetzner { ...@@ -258,7 +292,7 @@ class Hetzner {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
client.floatingIPs.actions.assign(id,serverId) client.floatingIPs.actions.assign(id, serverId)
.then(function (response) { .then(function (response) {
let d = _.values(response.floatingIP); let d = _.values(response.floatingIP);
...@@ -275,5 +309,9 @@ class Hetzner { ...@@ -275,5 +309,9 @@ class Hetzner {
} }
function randomInt(low, high) {
return Math.floor(Math.random() * (high - low) + low)
}
module.exports = Hetzner; module.exports = Hetzner;
...@@ -133,18 +133,19 @@ async function init() { ...@@ -133,18 +133,19 @@ async function init() {
async function checkServers() { async function checkServers() {
let servers = await het.getAllServers('fsn1') let servers = await het.getAllServers('fsn1')
console.log(servers) console.log(servers)
let masterid=await het.getMasterServerId()
for (let i = 0; i < servers.length; i++) for (let i = 0; i < servers.length; i++)
if (servers[i].name !== 'master') { if (servers[i].id !== masterid) {
let min = getMinDiff(servers[i].created) let min = getMinDiff(servers[i].created)
let status = await getWorkFloating(servers[i].publicNet.server.publicNet.ipv4.ip) let status = await getWorkMaster(servers[i].publicNet.server.publicNet.ipv4.ip)
status = parseInt(status) status = parseInt(status)
switch (status) { switch (status) {
case 404: case 404:
if (min > 20) { if (min > 45) {
await het.deleteServer(servers[i].id) await het.deleteServer(servers[i].id)
console.log('Need remove server ' + servers[i].name + ' Idle is ' + min) console.log('Need remove server ' + servers[i].name + ' Idle is ' + min)
} }
...@@ -180,28 +181,29 @@ function getMinDiff(end) { ...@@ -180,28 +181,29 @@ function getMinDiff(end) {
} }
async function checkIps() {
let ips = await het.getAllFloatingIps()
for (let i = 0; i < ips.length; i++) {
let status = await getWorkFloating(ips[i].ip)
async function checkIps(ip) {
let status = await getWorkFloating(ip)
status = parseInt(status) status = parseInt(status)
switch (status) { switch (status) {
case 404: case 404:
await postFloatingIps([ips[i].ip]) await postFloatingIps([ip])
break break
case 400: case 400:
await postFloatingIps([ips[i].ip]) await postFloatingIps([ip])
break break
case 0: case 0:
await het.delFloatingIp(ips[i].id) await het.removeFloatingIpByIp(ip)
break break
case 1: case 1:
break break
} }
}
} }
async function initToken() { async function initToken() {
...@@ -254,14 +256,14 @@ async function attacher() { ...@@ -254,14 +256,14 @@ async function attacher() {
attached = true attached = true
await postFloatingIps([ips[i].ip]) await postFloatingIps([ips[i].ip])
addBaship(ips[i].ip) addBaship(ips[i].ip)
break return checkIps(ips[i].ip)
} }
} }
} }
if (attached)
return
for (let i = 0; i < ips.length; i++) { for (let i = 0; i < ips.length; i++) {
if (typeof ips[i].server !== "number") if (typeof ips[i].server !== "number")
...@@ -275,8 +277,7 @@ async function attacher() { ...@@ -275,8 +277,7 @@ async function attacher() {
} }
return true
} }
...@@ -340,6 +341,20 @@ function getWorkFloating(ip) { ...@@ -340,6 +341,20 @@ function getWorkFloating(ip) {
} }
function getWorkMaster(ip) {
const request = require('request');
let url = 'http://admin.fcfglobal.co:3000/getMasterIpDetail/' + ip
return new Promise(function (resolve, reject) {
request(url, {timeout: 15000}, function (error, res, body) {
resolve(body)
});
});
}
function addIp() { function addIp() {
const request = require('request'); const request = require('request');
......
...@@ -19,15 +19,18 @@ tesT() ...@@ -19,15 +19,18 @@ tesT()
async function tesT() { async function tesT() {
await init() await init()
// let ips = await het.getAllServers() try {
// console.log(ips) let images = await het.createServerWithSnap(constant.nuremberg)
console.log(JSON.stringify(images))
}
catch (e) {
console.log(JSON.stringify(e))
}
//console.log(ips) //console.log(ips)
// for (let i = 0; i < ips.length; i++) { // for (let i = 0; i < images.length; i++) {
// //console.log( typeof ips[i].server === "number") // console.log(images[i].description)
// // if (typeof ips[i].server !== "number")
// // {
// // await het.removeFloatingIpByIp(ips[i].ip)
// // }
// //
// //
// //
......
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