Created
November 21, 2017 20:51
-
-
Save asbjornenge/0497d739e9091168957099fbae4d5406 to your computer and use it in GitHub Desktop.
Update the images for a docker stack file from swarm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
const fs = require('fs') | |
const { execSync } = require('child_process'); | |
const args = process.argv.slice(2) | |
const stack = args[0] | |
const stackfile = stack+'.yml' | |
const SWARM_SERVICES_RAW = execSync(`docker service ls | grep ${stack} | awk '{print $5}'`) | |
const STACKFILE_SERVICES_RAW = execSync(`cat ${stackfile} | grep image | awk '{print $2}'`) | |
let swarm_services = SWARM_SERVICES_RAW.toString().split('\n') | |
.filter(s => s != '') | |
let stackfile_services = STACKFILE_SERVICES_RAW.toString().split('\n') | |
.filter(s => s != '') | |
async function main() { | |
for (let image of stackfile_services) { | |
let _image = image.split(':') | |
let service = _image[0]+':'+_image[1] | |
let version = _image[2] | |
let swarm_service = swarm_services.reduce((match, ss) => { | |
if (ss.indexOf(service) === 0) return ss | |
return match | |
}, null) | |
if (!swarm_service) continue | |
if (image === swarm_service) continue | |
console.log(image+' -> '+swarm_service) | |
await replace(image, swarm_service) | |
} | |
} | |
async function replace(to_replace, replacement) { | |
var data = await readFile(stackfile) | |
var re = new RegExp(to_replace, 'g'); | |
var result = data.replace(re, replacement) | |
await writeFile(stackfile, result) | |
} | |
const readFile = filePath => new Promise((resolve, reject) => { | |
fs.readFile(filePath, 'utf8', (err, data) => { | |
if (err) reject(err); | |
else resolve(data); | |
}) | |
}) | |
const writeFile = (filePath, content) => new Promise((resolve, reject) => { | |
fs.writeFile(filePath, content, 'utf8', (err, data) => { | |
if (err) reject(err); | |
else resolve(data); | |
}) | |
}) | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment