denis-codefresh-kube-integration

* The example will print all service in default namespace and create mongo `Project` (Read more about project below) * Obtain cluster credentials: * Run `export CURRENT_CONTEXT=$(kubectl config current-context) && export CURRENT_CLUSTER=$(kubectl conf

Usage no npm install needed!

<script type="module">
  import denisCodefreshKubeIntegration from 'https://cdn.skypack.dev/denis-codefresh-kube-integration';
</script>

README

Integration with K8 over GKE

OLEG TEST

Example

  • The example will print all service in default namespace and create mongo Project (Read more about project below)
  • Obtain cluster credentials:
    • Run export CURRENT_CONTEXT=$(kubectl config current-context) && export CURRENT_CLUSTER=$(kubectl config view -o go-template="{{\$curr_context := \"$CURRENT_CONTEXT\" }}{{range .contexts}}{{if eq .name \$curr_context}}{{.context.cluster}}{{end}}{{end}}") && export KUBE_HOST=$(kubectl config view -o go-template="{{\$cluster_context := \"$CURRENT_CLUSTER\"}}{{range .clusters}}{{if eq .name \$cluster_context}}{{.cluster.server}}{{end}}{{end}}")
    • Run: export KUBE_CA_CERT=$(kubectl get secret -o go-template='{{index .data "ca.crt" }}' $(kubectl get sa default -o go-template="{{range .secrets}}{{.name}}{{end}}"))
    • Run: export KUBE_ACCOUNT_TOKEN=$(kubectl get secret -o go-template='{{index .data "token" }}' $(kubectl get sa default -o go-template="{{range .secrets}}{{.name}}{{end}}"))
  • Run example.js

PROJECT

Definition

Project is an abstraction of set of resources that together have applicative purpose.

At the moment, project must have at service, one service

Structure

{
    selector,
    namespace,
    stauts,
    resources,
    name,
    metadata
}
  • Selector - Cluster logical name as represented in Codefresh
  • Namespace - Namespace where the project exist
  • Status - Status of the project ({type: String("SUCCESS", "FAILED", "WARNING", "IN_PROGRESS" ,"UNKNOWN")})
  • Resources - Set of resources that defined the project
  • Metadata - additional data analyzed and aggregated from resources and from Codefresh other service if possible ({labels: Object, projectSelectors: Object, containers: Object[{image: String, name: String, status: Object[]}]}).

Project API (REST Calls)

* GET `/projects` - returns an array of all projects with minimal information about the project
* GET `/projects/:name` - return specific project with full description
* POST `/projects` - create a project
* DELETE `/projects/:name` - delete a project (deletion means, delete all the resources)
* PUT `/projects/:name` - update project resources

Project API (As object)

* Evenets:
    * ['SERVICE.ADDED', 'DEPLOYMENT.ADDED', 'REPLICASET.SET.ADDED', 'POD.SET.ADDED']
* Functions:
    * setName(name: String) - Set the project name, project automatically sets his name when adding service
    * getName - return the projects name
    * getNamespace - return the projects namespace
    * analyzeStatus - traverse all the current resources and analyze the project status
    * setService(svc: Service) - set the projects service
    * setDeployment(deploy: Deployment) - set the projects deployment
    * setPods(pods: Pod || Pod[]) - set the projects pods
    * setReplicaSets(rss: Replicaset || Replicaset[]) - set the projects
    * toMinifiedJson - return minified representation of project (`{name, namespace, selector, metadata, status}`)
    * toJson - return full representation of the project