Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/snowdrop/istio-java-api
A Java API to generate Istio descriptors, inspired by Fabric8's kubernetes-model.
https://github.com/snowdrop/istio-java-api
api code-generator golang istio java kubernetes
Last synced: about 1 month ago
JSON representation
A Java API to generate Istio descriptors, inspired by Fabric8's kubernetes-model.
- Host: GitHub
- URL: https://github.com/snowdrop/istio-java-api
- Owner: snowdrop
- License: apache-2.0
- Archived: true
- Created: 2017-12-05T20:52:34.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-03-29T21:06:30.000Z (over 2 years ago)
- Last Synced: 2024-06-18T21:43:15.637Z (5 months ago)
- Topics: api, code-generator, golang, istio, java, kubernetes
- Language: Java
- Size: 17.8 MB
- Stars: 112
- Watchers: 9
- Forks: 33
- Open Issues: 17
-
Metadata Files:
- Readme: README.adoc
- License: LICENSE
Awesome Lists containing this project
README
**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 https://istio.io[Istio]'s domain allowing, in particular, the generation of Istio deployment
descriptors.This project is inspired by https://github.com/fabric8io/kubernetes-model[Fabric8's kubernetes-model] and relies on
the same approach: a Go program uses Go reflection to generate a http://json-schema.org[JSON Schema] which is then used by
https://github.com/joelittlejohn/jsonschema2pojo[jsonschema2pojo] to generate Java classes. jsonschema2pojo is configured to use
a custom annotator, `IstioTypeAnnotator` (found in the `istio-model-annotator` module), to add
(https://github.com/fasterxml/jackson[Jackson], https://jcp.org/en/jsr/detail?id=380[Bean Validation - JSR 380] and
https://github.com/sundrio/sundrio[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.[Note]
====
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 https://golang.org/doc/install[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.
:([source,bash]
----
# 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
https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/[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`.