npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cisco-kube-client

v1.2.0

Published

Cisco Kubernetes and OpenShift client for Node.js

Downloads

54

Readme

banner

Cisco Kubernetes Client for Node.js

github-icon npm-icon

A Node.js client library for Kubernetes and OpenShift. This client allows a Node.js application to easily interface with a Kubernetes or OpenShift master using the respective APIs.

Full technical documentation is provided here.

Getting Started

Installation

The latest stable version of the client is available from npm:

npm install cisco-kube-client

Configuration

The client constructor must be given an object with properties defining the desired configuration. Information about both required and optional parameters can be found below.

Required parameters

{
    //String:   Hostname of the API server
    host: 'https://localhost:8443'
    
    //String:   Version of the API server   Default: 'v1'
    , version: 'v1'

    //Object:   Credentials sent to the oAuth provider
    , auth: {
        user: '<username>'      //String: Username
        , pass: '<password>'    //String: Password
    }
}

Optional parameters

{
    //String:   Default client namespace     Default: null
    , namespace: 'default'

    //Number:   Level of log output          Default: 'fatal'
    , loglevel: 'fatal'
    
    //Boolean:  Enable Extensions endpoints  Default: false
    , beta: false
    
    //Boolean:  Enable OpenShift endpoints   Default: false
    , oshift: false

    //Boolean:  Return a client Promise      Default: false
    , usePromise: false

    //Number:   HTTP request timeout in ms   Default: null
    , timeout: 10000

    //String:   Access token for oAuth       Default: null
    , token: null

    //String:   Host protocol                Default: 'https'
    , protocol: 'https'

    //Number:   Host port                    Default: 8443
    , port: 8443

    // Note that 'protocol' and 'port' properties are only checked if
    // the corresponding component is missing from the 'host' property.
}

Usage Pattern

The Cisco Kubernetes Client utilizes promises from the bluebird Node.js module for asynchronous processing. Promises are the recommended usage pattern for the Cisco Kubernetes Client. See here for more information on proper promise usage.

The client constructor will return a Promise of the client, which will resolve when initialization has completed.

Almost all endpoint methods will return promises of the response data. The only exception to this is the watch method, which returns an EventEmitter object with data events instead.

var Client = require('cisco-kube-client');

//Minimum viable configuration example
var options = {
    host: 'localhost'
    , auth: {
        user: 'johndoe'
        , pass: 'password123'
    }
};

Client(options).then(function (client) {
    // Use the client here
    client.<resource>.<method>.then(function (result) {
        // Process the result here
    });
});

Callback support

The client also has full compatibility with Node.js style callbacks if you prefer not to use promises in your application.

If the client constructor or any endpoint methods receive a function as the last parameter, instead of returning a promise that function will be used as a callback with the promise's value as the second parameter.

var Client = require('cisco-kube-client');

var options = {
    host: 'localhost'
    , version: 'v1'
};

Client(options, function (error, client) {
    // Use the client here
});

Client features

Structure

All API resource endpoints are accessed with the following template:

client.<resource>.<method>

The accepted parameters and return values for each method are consistent across all API resource endpoints.

Valid values for <resource> and <method> are detailed below.

Available Kubernetes resources

See the official API specification for details.

  • endpoints
  • events
  • limitRanges
  • namespaces
  • nodes
  • persistentVolumeClaims
  • persistentVolumes
  • podTemplates
  • pods
  • replicationControllers
  • resourceQuotas
  • secrets
  • serviceAccounts
  • services

Available Extensions resources

See the official API specification for details. Only available if the client has been configured with beta: true

Available OpenShift resources

See the official API specification for details. Only available if the client has been configured with oshift: true

Available methods

Basic methods

These expose fundamental API server functionality:

   get ([query], [opts], [callback])
 watch ([query], [opts], [callback])
create (body, [opts], [callback])
update (query, body, [opts], [callback])
 patch (query, body, [opts], [callback])
delete (query, [opts], [callback])

The optional opts argument is an object containing properties to be applied to the internal http request. This allows for per-call overrides of library default functionality. The most common use for this is to specify request headers and/or query strings. The namespace property is also recognized to override the default namespace filter settings for the client. Additionally, the labels and fields properties may contain labelSelector and fieldSelector options, respectively.

Watch method

The watch method is unique in that it returns a Promise of a custom EventEmitter object rather than an API response body. The initial state of the watched resource is fetched and is available as the initialState property of the emitter object. The watch connection will not be initialized until the emitter's start method is called. This allows for the user to set up all event listeners without missing any watch events. The events that will be emitted are response, create, update, delete, and error.

// Watch for updates to all resources of type <resource>
client.<resource>.watch().then(function (em) {
    console.log(em.initialState);   // Current state of the resource

    // Set up event listeners
    em.on('create', createHandler);
    em.on('update', updateHandler);
    em.on('delete', deleteHandler);
    
    em.start(); // Start the watch connection with the API server
});

Nested endpoints

Some resources have nested resource endpoints available within them. These are exposed by name under the parent resource. Inspect the client object for access to the complete list of available methods.

console.log(client);    // Print available resources and methods

Nested endpoints may be accessed as shown below. Note that all nested endpoints operate on a single top level resource, so the query parameter is always required.

//Base endpoint:    client.<resource>.<method>

var podPromise = client.pods.get('<podName>');

//Nested endpoint:  client.<parent>.<resource>.<method>

var podLogPromise = client.pods.logs.get('<podName>');

Compound methods

In addition to the base functionality offered by the API itself, this client also implements some methods for batch operations. These methods are exposed through the nodes resource and act on all pods running on the given node.

   getPods (query, [opts], callback)        // Get all pods
 patchPods (query, body, [opts], callback)  // Patch all pods
deletePods (query, [opts], callback)        // Delete all pods
  evacuate (query, [opts], callback)        // Evacuate a node

The evacuate method flags the given node as unschedulable via an internal call to patch and removes all pods residing on the given node via an internal call to deleteFrom.

Proxy resources

These can be accessed using: client['proxy/<resource>'].<method>

Available resources are nodes, pods, and services. These proxy resources have been implemented based on the Kubernetes API, but they have not been tested. USE AT YOUR OWN RISK!

Examples

Getting from pods

To get all pods:

client.pods.get().then(function (pods) {
    console.log('pods:', pods);
});

Defining a custom API group

Custom API groups can be defined according to the Kubernetes specification. These APIS are reached at apis/{name} by default, but a custom prefix parameter can be defined to change this. Nested endpoints and per-endpoint request options can also be specified.

All endpoints defined in the API specification's spec property will be added to the client's list of available endpoints.

client.defineAPI({
    name: 'apiGroup'
    , spec: {
        endpoints: {
            kind: 'Endpoint'
        }
    }
});
// Adds a property `client.endpoints` -> {host}/apis/apiGroup/endpoints

Defining a custom resource endpoint

Individual endpoints can also be added on demand. Use the following method to define a single custom endpoint:

client.createEndpoint('test', spec);
// then use the test resource like any other top level endpoint

Version compatibility

This client is built to interface with version v1 of the official Kubernetes and OpenShift APIs. While backward compatibility with older versions has been attempted, it cannot be guaranteed. No further support will be offered for API versions that have been deprecated.