-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
19 changed files
with
358 additions
and
45 deletions.
There are no files selected for viewing
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
// finds the deployment that's used for a service given it's labels and service's selectors | ||
function findDeploymentForService(list, selectors) { | ||
return findByLabels(list, "Deployment", selectors); | ||
} | ||
|
||
function replaceResource(list, resource) { | ||
replaceItem(list, resource.kind, resource.metadata.name, resource); | ||
} | ||
|
||
// replaces an item of the given kind and name with a replacement | ||
function replaceItem(list, kind, name, replacement) { | ||
for (let index = 0; index < list.length; index++) { | ||
const element = list[index]; | ||
|
||
if ((element.kind == kind) && (element.metadata.name == name)) { | ||
// found it. | ||
list[index] = replacement; | ||
return | ||
} | ||
} | ||
} | ||
|
||
function findByName(list, kind, name) { | ||
var found; | ||
list.forEach(resource => { | ||
if ((resource.kind == kind) && (resource.metadata.name == name)) { | ||
found = resource; | ||
return; | ||
} | ||
}); | ||
|
||
return found; | ||
} | ||
|
||
// finds an item using the labels and its kind | ||
function findByLabels(list, kind, labels) { | ||
var found; | ||
list.forEach(element => { | ||
if (element.kind == kind) { | ||
if (doLabelsMatch(element, labels)) { | ||
found = element; | ||
return; | ||
} | ||
} | ||
}); | ||
|
||
return found; | ||
} | ||
|
||
// checks it two sets of labels (and selectors) match | ||
function doLabelsMatch(item, labels) { | ||
itemLabels = getLabels(item); | ||
for (label in labels) { | ||
if (labels[label] != itemLabels[label]) { | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
|
||
function getLabels(item) { | ||
return item.spec.template.metadata.labels; | ||
} | ||
|
||
function deepCompare () { | ||
var i, l, leftChain, rightChain; | ||
|
||
function compare2Objects (x, y) { | ||
var p; | ||
|
||
// remember that NaN === NaN returns false | ||
// and isNaN(undefined) returns true | ||
if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { | ||
return true; | ||
} | ||
|
||
// Compare primitives and functions. | ||
// Check if both arguments link to the same object. | ||
// Especially useful on the step where we compare prototypes | ||
if (x === y) { | ||
return true; | ||
} | ||
|
||
// Works in case when functions are created in constructor. | ||
// Comparing dates is a common scenario. Another built-ins? | ||
// We can even handle functions passed across iframes | ||
if ((typeof x === 'function' && typeof y === 'function') || | ||
(x instanceof Date && y instanceof Date) || | ||
(x instanceof RegExp && y instanceof RegExp) || | ||
(x instanceof String && y instanceof String) || | ||
(x instanceof Number && y instanceof Number)) { | ||
return x.toString() === y.toString(); | ||
} | ||
|
||
// At last checking prototypes as good as we can | ||
if (!(x instanceof Object && y instanceof Object)) { | ||
return false; | ||
} | ||
|
||
if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) { | ||
return false; | ||
} | ||
|
||
if (x.constructor !== y.constructor) { | ||
return false; | ||
} | ||
|
||
if (x.prototype !== y.prototype) { | ||
return false; | ||
} | ||
|
||
// Check for infinitive linking loops | ||
if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) { | ||
return false; | ||
} | ||
|
||
// Quick checking of one object being a subset of another. | ||
// todo: cache the structure of arguments[0] for performance | ||
for (p in y) { | ||
if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { | ||
return false; | ||
} | ||
else if (typeof y[p] !== typeof x[p]) { | ||
return false; | ||
} | ||
} | ||
|
||
for (p in x) { | ||
if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) { | ||
return false; | ||
} | ||
else if (typeof y[p] !== typeof x[p]) { | ||
return false; | ||
} | ||
|
||
switch (typeof (x[p])) { | ||
case 'object': | ||
case 'function': | ||
|
||
leftChain.push(x); | ||
rightChain.push(y); | ||
|
||
if (!compare2Objects (x[p], y[p])) { | ||
return false; | ||
} | ||
|
||
leftChain.pop(); | ||
rightChain.pop(); | ||
break; | ||
|
||
default: | ||
if (x[p] !== y[p]) { | ||
return false; | ||
} | ||
break; | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
|
||
if (arguments.length < 1) { | ||
return true; //Die silently? Don't know how to handle such case, please help... | ||
// throw "Need two or more arguments to compare"; | ||
} | ||
|
||
for (i = 1, l = arguments.length; i < l; i++) { | ||
|
||
leftChain = []; //Todo: this can be cached | ||
rightChain = []; | ||
|
||
if (!compare2Objects(arguments[0], arguments[i])) { | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
module Alterant | ||
VERSION = '0.0.1' | ||
COPYRIGHT_MESSAGE = "(c) 2018 Cloud66 Inc." | ||
VERSION = '0.0.2' | ||
COPYRIGHT_MESSAGE = "(c) 2019 Cloud66 Inc." | ||
APP_NAME = 'Alterant' | ||
end |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
$$.forEach($ => { | ||
if ($.kind == 'Service') { | ||
$.metadata.annotations = [{ "cloud66.com/deployed-at": Date.now() }]; | ||
} | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
$$.forEach($ => { | ||
if ($.kind == 'Service') { | ||
$.spec.type = "LoadBalancer"; | ||
//$.spec.loadBalancerIP = "35.199.15.224"; | ||
} | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,19 @@ | ||
var namespace = $.metadata.name | ||
deployment = { | ||
apiVersion: "extensions/v1beta1", | ||
kind: "Deployment", | ||
metadata: [ | ||
{ namespace: namespace }, | ||
{ name: "web" } | ||
], | ||
spec: | ||
{ template: | ||
{ spec: | ||
{ containers: [{ "image": "app_image:latest", "name": "my-pod" }] } | ||
$$.forEach($ => { | ||
var namespace = $.metadata.name | ||
deployment = { | ||
apiVersion: "extensions/v1beta1", | ||
kind: "Deployment", | ||
metadata: [ | ||
{ namespace: namespace }, | ||
{ name: "web" } | ||
], | ||
spec: | ||
{ template: | ||
{ spec: | ||
{ containers: [{ "image": "app_image:latest", "name": "my-pod" }] } | ||
} | ||
} | ||
} | ||
} | ||
|
||
$$.push(deployment) | ||
$$.push(deployment); | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
var execSync = require("child_process") | ||
execSync("ps -ef") |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log(JSON.stringify(process.ENV)) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
while(true) console.log(1) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
process.exit(0) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log(this) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
var web_container = new Containers($.spec.template.spec.containers).by_name("web"); | ||
var ports = [{ containerPort: 81 }, { containerPort: 444}] | ||
web_container.ports = ports | ||
$$.forEach($ => { | ||
var web_container = new Containers($.spec.template.spec.containers).by_name("web"); | ||
var ports = [{ containerPort: 81 }, { containerPort: 444}]; | ||
web_container.ports = ports; | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
var containers = new Containers($.spec.template.spec.containers) | ||
var web_container = containers.by_name("web") | ||
var containerImage = new DockerImage(web_container.image) | ||
containerImage.tag = "1.2" | ||
web_container.image = containerImage.address() | ||
$$.forEach($ => { | ||
var containers = new Containers($.spec.template.spec.containers); | ||
var web_container = containers.by_name("web"); | ||
var containerImage = new DockerImage(web_container.image); | ||
containerImage.tag = "1.2"; | ||
web_container.image = containerImage.address(); | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
istioSidecar = YamlReader("istio.yml"); | ||
|
||
// go through all items | ||
$$.forEach($ => { | ||
sidecar = istioSidecar; | ||
|
||
// if you find a service, then look for it's deployment | ||
if ($.kind == "Service") { | ||
// we have a service. look for it's deployment | ||
selectors = $.spec.selector; | ||
deployment = findDeploymentForService($$, selectors); | ||
|
||
// find the service name and add it as the last arg of istio container config | ||
name = $.metadata.name; | ||
sidecar.args.push(name); | ||
|
||
// add the side car to the deployment | ||
var containers = deployment.spec.template.spec.containers; | ||
if (containers.length == 1) { | ||
containers.push(sidecar); | ||
} | ||
|
||
$$.replace(deployment); | ||
} | ||
}); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
name: istio-proxy | ||
image: istio.io/proxy:0.5.0 | ||
args: | ||
- proxy | ||
- sidecar | ||
- --configPath | ||
- /etc/istio/proxy | ||
- --binaryPath | ||
- /usr/local/bin/envoy | ||
- --serviceCluster |
Oops, something went wrong.