Coder Social home page Coder Social logo

spring-cloud / spring-cloud-skipper Goto Github PK

View Code? Open in Web Editor NEW
113.0 31.0 77.0 4.38 MB

A package manager that installs, upgrades, and rolls back Spring Boot applications on multiple Cloud Platforms.

Home Page: http://cloud.spring.io/spring-cloud-skipper/

License: Apache License 2.0

Ruby 0.03% Java 99.15% Python 0.04% Shell 0.78%

spring-cloud-skipper's Introduction

⛔ Spring Cloud Dataflow has moved to a monorepo.

This repo is archived and now exists as the spring-cloud-skipper module(s) in the Dataflow monorepo.

Please file any issues/PRs in the Dataflow repo.

spring-cloud-skipper's People

Contributors

aweeks-clgx avatar chrisjs avatar corneil avatar cppwfs avatar dbahatsap avatar donovanmuller avatar dorgan-csgroup avatar dturanski avatar eddumelendez avatar ericbottard avatar fitzoh avatar ghillert avatar github-actions[bot] avatar ilayaperumalg avatar itytar avatar jkschneider avatar jvalkeal avatar markpollack avatar onobc avatar sabbyanandan avatar spring-builds avatar spring-operator avatar tzolov avatar viniciusccarvalho avatar waychan23 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-cloud-skipper's Issues

Add Skipper-cli

As a developer, I'd like to add the initial infrastructure for Skipper-cli, so we can use it to interact with the Skipper-server.

Depends on #6.

Acceptance:

  • Decide the default to connect to Skipper-server.

Refactor Package/Release controller

Currently, all the REST operations are grouped under PackageController (package deploy/update, release rollback/undeploy). We also have Update properties explicitly for the package update operation.

We can refactor this further to move all the release related operations under ReleaseController and remove the UpdateProperties completely.

Add support for nested packages

Support for packages that contain other packages . This will be a common way that Data Flow Stream definitions will be provided, e.g. ticktock stream is a collection of two 'dependent' packages, time and log.

Allow for the top level package configuration to override the dependent package configuration, e.g. version, application properties, deployment properties. The top level package should merge it's values into the dependent package configuration.

Add CI plan

As a developer, I'd like to add CI plan for Skipper.

Open up logging so port is logged.

Should see a log statement such s

2017-08-02 15:37:57.414  INFO 30678 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)

Add multi-platform support

Create @ConfigurationProperties classes per platform that provide necessary connection infomation. Can model based on the approach used in config server for git/vault.

Each entry will have a name and will result in the creation of an AppDeployer instance for the relevant platform.

Update to Spring Cloud Deployer 1.3 milestone

We need to access to new features in the deployer API.

  1. Support for the PCF deployer to not delete routes when deleting the applicaiton
  2. Access to a new execute method, as in Spring Template class design, e.g. JdbcTemplate, to access the lower level client library.

<T> T execute(ClientCallback<T> action)

Review code to add @NotNullApi package annotation and @Nullable

Encountered a few NPE's that would have been caught if we used these annotations. For example, org.springframework.cloud.skipper.domain.Deploymnet had a null deploymentProperties value. we can set the field to an empty map. Similarly, the custom finder methods in ReleaseRepositoryImpl can return null.

See Spring 5 custom meta annotation.

Create design for pluggable backend package storage

In CF, we can only rely on a relational database for persistent storage. A small interface, should be created such that we can also persist package.zip files to a filesystem in addition to a relational database.

Add @Version to entities for optimistic locking

Note AbstractEntity class in restbucks.

@Getter
@ToString
@EqualsAndHashCode
public class AbstractEntity implements Identifiable<Long> {

	private final @Id @GeneratedValue(strategy = GenerationType.AUTO) @JsonIgnore Long id;
	private @Version Long version;

	protected AbstractEntity() {
		this.id = null;
	}
}

Add initial support to download and resolve packages

As a developer, I'd like to add the initial support to resolve and download packages.

Design notes:

  • To bootstrap the process, we will create the index archive by hand and host it in the project. The archive is similar to what is in Debian's packages.gz and also Helm's index.yaml. YAML is a good format, the file contains multiple documents main metadata that can be used to list/search packages.
  • In the future, the server is expected to pull down package indexes from remote repositories.

Acceptance:

  • The initial support is based on a hard coded packages.zip artifact that contains a packages.yml document.
  • The Server will unpack a packages.zip and load it into memory/db.
  • file:// or classpath:// can be used for test purposes at first to hose the packages.zip file.

Package search command improvements

  • Rename Command from list to search
  • set page size to a large value, 2000
  • support wildcard expression for the name, maps on to Spring Data Repository 'like' search

Default listing is a small ascii-art table with basic information, name, version, description.

Add an --details true command option that will show full package metadata, not in a table format. A newline separator between each dump of the package metadata

Add PackageInstallController

As a developer, I'd like to create PackageInstallController, so we can create a link in the PackageMetadata Resource to install the specific package.

Notes:

@PostMapping
@RequestMapping("/install")
@ResponseStatus(HttpStatus.CREATED)
public Release install(@RequestBody InstallReleaseRequest installReleaseRequest) {
...
...
}

Acceptance:

  • We can assume a single ‘default’ environment for the time being.
  • Request successfully installs the package.
  • A user-friendly message is available as a response.

Create package upload command

A package's .zip file should be uploaded from the client and stored on the server. When a file is uploaded, searches against package metadata are updated.

The initial implementation should store packages in the database and support the package search command. See #59

After upload, resources such as those listed below should be available, mimicking what one would expect if stored in a filesystem.

http:///repository//log/log-1.1.0.zip

Repo list command

Lists the repositories in a small ascii-art table that skipper knows about. Show the name, to be used in other commands, and the resource URL to that repository.

Name URL
test http:///<endpoint for searching repo contents/ (this is a server managed repository)
stable-packages http://github.com/markpollack/skipper-packages/stable/packages (some remote repository on a remoted hosted location)

Add repository implementation for packages

As a developer, I'd like to add repository implementation to explore packages via findAll() operation.

Acceptance:

  • Repository implementation follows spring-data-jpa model
  • findAll() operation searches across all the resolved packages
  • Unit tests included

Add shell command to retrieve package summaries

As a developer, I'd like to add a shell command to retrieve all the available packages.

Notes:
This command will invoke the findAllPackageSummary backend operation.

Acceptance:
The new command (maybe: skipper:>package list?) retrieves all the packages.

Create Repository entity + supporting CRUD operations

A Repository entity represents a location to download package information. It refers to a location to obtain an index file of all packages hosted by that repository.

Expose via Spring Data REST for CRUD.

Do not consider keyfiles/sha hashes etc.

Add REST-API to search for packages

As a developer, I'd like to add the REST-APIs, so we can interact with the Skipper-server from CLI/UI.

Design notes:
A REST API living under /api is created that follows the conventions of Spring Data Rest.

@RequestMapping(“/api/packages/metadata”)

Acceptance:

  • Content types are application/json and no HATEOAS resources are used yet.
  • Create basic TestMvC based tests.
  • Root controller for resource discovery is available for: /dashboard and /packages

Add Travis and CodeCov integration

As a developer, I'd like to add Travis CI and CodeCov integration for Skipper.

Acceptance:

  • Use sudo: required for Travis builds similar to SCDF
  • Travis CI integration automatically builds each PR
  • Travis + CodeCov integration automatically measure test coverage for each PR

Include package metadata in the HAL _links

As a developer, I'd like to include packageMetadata in the returned HAL _links, so it can be used to drill into all the metadata associated with a package.

Notes:
This requires creating a ResourceProcessor object for the PackageMetadata class. See [here](This requires creating a ResourceProcessor object for the PackageMetadata class. See here for more details.

Acceptance:
Drilling into packageMetadata link returns all the metadata fields associated with the selected package.

Add package summary endpoint

As a developer, I'd like to add findAllPackageSummary operation, so it can be used to search and return a high-level summary of the package as opposed to all the metadata associated with it. This lightweight response is useful for tile-page rendering where we intend to show only the name and the icon.

Notes:
This can be done using a Spring DATA REST projection or perhaps another finder method on the PackageMetadata Spring Data repositories.

Acceptance:
The "name", "description", and "icon" of the package is returned in the response.

Add test repository data

Create structure to deploy the 'time' source. Under test/resources add

repositories/locations/testrepo.yml
repositories/sources/testrepo/log/log-1.0.0/
     - package.yml
     - values.yml
     - templates/application.yml
repositories/binaries/testrepo/
     - index.yml
     - log-1.0.0.zip

Utilities to create the index and zip files will be developed separately.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.