Skopos Plugins

Plugins are used by Skopos to perform operations on the target deployment environment. This document describes the plugins that come with Skopos how to configure them. The last section also provides detailed information on the plugin operations and how to use them in manually-created deployment plans or (for extended operations provided by some of the plugins) in application model descriptors, to define additional plan steps to be inserted into a plan generated by Skopos.

Plugin Types

The Skopos plugins implement one or more sets of related operations. These sets are grouped as follows:

  • Primary (Core) Operations - these operations create, destroy and query component instances;
  • Service Discovery Operations - used to register and de-register instances with an application-wide service discovery mechanism (e.g., a local DNS service)
  • Load Balancer Operations - used to connect instances that serve client application requests to a load balancer. Note that while an application has (at most) one service discovery mechanism, it may have any number of load balancers (e.g., one for each type of API or HTTP GUI that it provides)
  • Extended - plugins may provide additional operations that are not part of the above groups. Such operations will be invoked by automatically-generated plans created by Skopos only when the application model defines additional plan steps ('hooks') that explicitly request those operations to be done as part of creating, upgrading or deleting a component instance. (TBD: reference to the model format section that defines those).

For a list of operations in each group and their detailed descriptions, please see Plugin Interfaces.

Skopos Plugins

The following plugins come with Skopos and the operations that they support:

Name Core SD LB Ext Description and other supported operations
docker Creates and destroys components as Docker containers on the local host.
docker-swarm Creates and destroys components as services on a Docker Swarm cluster.
docker-elb (works only with the docker plugin) supports connecting and disconnecting containers to an EC2 application-level load balancer.
ec2-asg supports Core operations on EC2 instances using auto-scaling groups and LB operations on network-layer load balancers (EC2 “classic” ELB)
ec2-ecs supports Core operations on EC2 Container Service (ECS) with both classic and application load balancers, as well as an optional service discovery using ELB load balancers and Route 53. EXPERIMENTAL
consul provides operations to query the state of consul services and modify the services’ ‘enabled’ tag.
http a plugin for issuing http requests, e.g., for the purposes of calling REST APIs and health/readiness checking
emulator a stub plugin that supports all operations (including some of the Extended operations supported by the 'docker' plugin). Can be used to create and test mock-up plans that do nothing.
slack a plugin for sending slack notifications

For more information on each plugin and how to use it, select the plugin's documentation from the left-side navigation bar.

Scripts

Scripts are simple plugins that do not receive deployment state data from Skopos and return nothing but a completion status (success or failure).

The script plugin mechanism is intended primarily for use in user-defined hooks to be added to deployment plans. Skopos provides the following scripts:

logwrites a text message to a file.

 

Configuration

Most plugins have reasonable defaults and don't require any specific configuration.

See each plugin reference for details on what configuration settings that plugin provides (requires and/or allows). You can see the list of plugins in the left side-bar menu.

Explicit plugin configuration for any plugins used in for an application can be provided in the target environment descriptor. This is true for both standard interface plugins (core, service discovery, load balancer) and extensions (e.g., the http plugin).

The target environment descriptor defines which plugins are to be used for planning a deployment and has a section named plugin_config, which may contain configuration for each of the plugins used. Here is an example environment file. Note the structure of the configuration section for each plugin is specific to that plugin.

core_plugin: ec2-asg
service_discovery_plugin: consul
service_discovery_auto: true

plugin_config:

  ec2-asg:
    vpc: test2-vpc,
    launch_config:
      template: test2-template-lc
      type: t2.nano
      public_ip: true
    image_id_subst: "{{image_id}}"
    lb:
      app: test2-app-elb

  consul:
    base_url: "http://localhost:8500/"
    join_timeout: 120     # seconds for new nodes to join

For details, see the Target Environment Descriptor and each plugins' configuration section.