Skip to content
This repository has been archived by the owner on Mar 30, 2022. It is now read-only.

Latest commit

 

History

History
72 lines (47 loc) · 3.72 KB

README.adoc

File metadata and controls

72 lines (47 loc) · 3.72 KB

Note

This project is now deprecated. Please use the Istio client in the https://github.com/fabric8io/kubernetes-client project starting with version 5.11.0.

istio-java-api

A project to generate a Java API for Istio's domain allowing, in particular, the generation of Istio deployment descriptors.This project is inspired by Fabric8’s kubernetes-model and relies on the same approach: a Go program uses Go reflection to generate a JSON Schema which is then used by jsonschema2pojo to generate Java classes. jsonschema2pojo is configured to use a custom annotator, IstioTypeAnnotator (found in the istio-model-annotator module), to add (Jackson, Bean Validation - JSR 380 and sundrio annotations.Sundrio is used generate idiomatic builder and DSL Java classes. Jackson is used to output JSON or YAML representation of the Java objects when needed.

Usage

Please take a look at the tests in istio-model/src/test/java to see how the API can be used. You can also take a look at the https://github.com/metacosm/istio-test-dsl project which demonstrates an end-to-end scenario using the Fabric8 OpenShift adapter and this API to send Istio artifacts to a running OpenShift cluster configured on which Istio is set up.

Starting with the 1.7.7 of this API, the bundled version of the Fabric8 Kubernetes client has been upgraded to use the non-backwards compatible 5.x versions. While this might not be an issue for most users of this API, it’s still worth noting.

Building instructions

If you only want to build the current version of the API and don’t intend on modifying how the JSON Schema is generated, you can build simply using mvn clean install as the project contains a pre-generated version of the schema.If you need to re-generate the classes from a newer version of the API, since the build relies on Go introspection, you will need to set up a Go programming environment.

Building the Java API

You will need to install Go and make. Run make. This will build the generate command line tool from Go and then run it to generate a JSON Schema in istio-model/src/main/resources/schema/istio-schema.json. A Maven build is then issued using the jsonschema2pojo Maven plugin to generate Java classes in istio-model/target/generated-sources and generate a Jar file containing the compiled version of these classes along with the JSON schema, ready to be used.

You can clean everything using make clean, only generate the schema using make schema or only generate the Java classes from an already generated schema such as the provided one using mvn clean install.

Updating the Java API when Istio is updated

Note
The process is not completely reproducible at this time. :(
# update to the latest istio version, rebuild crd list and packages
make metadata
# build using strict mode
make strict
# fix any issue, iterate… :)

You can also re-generate the properties files that are used to determine which Kubernetes Custom Resource Definitions (CRDs) are specified by Istio. These files are located in istio-common/src/main/resources/, one for each kind of supported CRDs and can be generated using make metadata. You can also re-generate the CSV file that is used to map Istio Go packages to Java packages. The file is located at istio-common/src/main/resources/packages.csv and can be generated using make metadata.