A Sonobuoy plugin to assess @crossplane conformance.

Crossplane Conformance Suite

A Sonobuoy plugin to assess Crossplane conformance. To try it, first download the sonobuoy CLI, then:

# The version of Crossplane you wish to conform with.
CROSSPLANE_VERSION=1.2

# To determine whether a Crossplane distribution is conformant. The distribution
# must be pre-installed on the cluster where Sonobuoy will run.
sonobuoy run --wait --plugin https://raw.githubusercontent.com/crossplane/conformance/release-${CROSSPLANE_VERSION}/plugin-crossplane.yaml
sonobuoy results $(sonobuoy retrieve) -m dump

# To determine whether a Crossplane provider is conformant. The provider must be
# pre-installed on the cluster where Sonobuoy will run, and must be the only
# provider installed on the cluster.
sonobuoy run --wait --plugin https://raw.githubusercontent.com/crossplane/conformance/release-${CROSSPLANE_VERSION}/plugin-provider.yaml
sonobuoy results $(sonobuoy retrieve) -m dump

Note that the provider conformance tests require some advanced setup. The test requires that at least one of each kind of managed resource exists and is ready (in the status condition sense).

This repository maintains a branch for each version of Crossplane that the conformance test suite supports. For example branch release-1.2 will test conformance with Crossplane 1.2.x. The docker image that powers the conformance suite also derives its version from the version of Crossplane it corresponds to. Tags are of the form 1.2.0-cf.1, where 1.2.x is the target version of Crossplane, and cf.1 is the version of the conformance test.

Note that the conformance tests are not typically sensitive to Crossplane patch releases. That is, in most cases when Crossplane 1.2.1 is released the conformance test suite's version will not be bumped accordingly, and will remain at 1.2.0-cf.X. In the unlikely event that a Crossplane patch release necessitates a conformance test suite update the patch version of the test suite will be updated to match the Crossplane patch version. The image referenced by the distribution and provider plugins in any particular release branch is always the authoritative conformance test for that major and minor version of Crossplane.

Comments
  • Accomodate providers with default deletion policies and provider configs

    Accomodate providers with default deletion policies and provider configs

    Description of your changes

    The defaulting of these fields will be introduced in crossplane-runtime v0.14 per https://github.com/crossplane/crossplane-runtime/pull/255. We'd like to support a transition period during which a provider may either specify the default or not. Unfortunately it's not easy to use cmp to test for "must be unset or value X" so I've just ignored the field for the time being

    I have:

    • [x] Read and followed conformance's contribution process.
    • [x] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    I've run cd provider && go test . against https://github.com/crossplane/provider-aws/commit/84acbf60bd68f2f7527c36dc3d23e955261bd932 (which is using a pre-release of runtime-0.14) and verified that the conformance tests tolerate the presence of the default fields.

  • Document how to run conformance tests

    Document how to run conformance tests

    What problem are you facing?

    The instructions for running these tests are currently fairly limited - we probably want something more like https://github.com/cncf/k8s-conformance/blob/master/instructions.md.

    How could conformance help solve your problem?

    We could add documentation that is roughly the same as the linked Kubernetes docs above, though we might need to expand on the difference between distribution and provider conformance testing. It's likely that we'll want to add these instructions at https://github.com/cncf/crossplane-conformance, rather than this repo.

  • Test PR to be closed

    Test PR to be closed

    Description of your changes

    Fixes #

    I have:

    • [ ] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

  • [release-1.2] Pin v1.2.2-cf.1

    [release-1.2] Pin v1.2.2-cf.1

    Description of your changes

    This new release contains only https://github.com/crossplane/conformance/pull/26.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    I haven't done too much yet - just confirmed I can docker pull the two new images.

  • Propagate handy GitHub Actions

    Propagate handy GitHub Actions

    Description of your changes

    https://github.com/upbound/.github

    This PR propagates the Backport and Comment Commands workflows from the above repo. The Backport workflow has been updated to support backporting PRs from forks. The Comment Commands workflow adds support for two /comment commands:

    • /backport Can be used to trigger a backport retroactively on a PR that didn't have a backport label when it was merged.
    • /points Can be used to quickly add a points/N label to an issue to represent how big a task it is.

    I have:

    • [x] Read and followed Crossplane's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.
    • [ ] Added backport release-x.y labels to auto-backport this PR if necessary.

    How has this code been tested

    I've tested both of these workflows in my own private repo that I use to test actions out.

  • [release-1.2] Pin to version v1.2.1-cf.1

    [release-1.2] Pin to version v1.2.1-cf.1

    Description of your changes

    Pin the conformance tests for Crossplane v1.2.x to v1.2.1-cf.1.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

  • Use release-x.x style release branches

    Use release-x.x style release branches

    Description of your changes

    Sadly the upbound/build submodule requires this format.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

  • Prepare to release the first conformance test build

    Prepare to release the first conformance test build

    Description of your changes

    This PR explains our branch and tagging strategy, and fixes the tag action.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

  • Document testing conformance against a particular version

    Document testing conformance against a particular version

    Description of your changes

    I have:

    • [x] Read and followed conformance's contribution process.
    • [ ] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    It has not. 🤠

  • Test managed resource readiness, and external name

    Test managed resource readiness, and external name

    Signed-off-by: Nic Cope [email protected]

    Description of your changes

    Advances https://github.com/crossplane/conformance/issues/10

    This PR takes provider conformance a step further by smoke testing that all managed resources defined by a provider can become ready, and populate their crossplane.io/external-name annotation. We rely on the person running the conformance test to manually create one of each kind of managed resource before running the test. I can't think of a great way to avoid this given that the conformance test logic can't know the schema, credentials, etc required to spin up and down managed resources.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [x] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    I've created a simple resource (a GCS bucket) and confirmed it passes the test.

  • Have make generate add license headers

    Have make generate add license headers

    Description of your changes

    Fixes https://github.com/crossplane/conformance/issues/12

    Use https://github.com/google/addlicense to automatically add Apache 2.0 license headers to any file that is missing them.;

    I have:

    • [x] Read and followed conformance's contribution process.
    • [x] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    I looked at the files with my human eyes and saw license headers.

  • Add a tool to measure the performance characteristics of providers

    Add a tool to measure the performance characteristics of providers

    Description of your changes

    Related https://github.com/crossplane/crossplane/issues/2979

    With this PR, a tool is added to measure the performance characteristics of providers. Details are in the following one-pager draft: https://github.com/crossplane/crossplane/pull/2983

    I have:

    • [x] Read and followed conformance's contribution process.
    • [x] Run make reviewable test to ensure this PR is ready for review.
  • Replace negz/provider-nop with crossplane/provider-nop

    Replace negz/provider-nop with crossplane/provider-nop

    Signed-off-by: Rahul Grover [email protected]

    Description of your changes

    Since provider-nop is ready to use, it might be a good idea to use the same for conformance tests. I have replaced occurrences of negz/provider-nop with crossplane/provider-nop and added essential spec required for the same.

    I have:

    • [x] Read and followed conformance's contribution process.
    • [x] Run make reviewable test to ensure this PR is ready for review.

    How has this code been tested

    I've run the test on a local kind cluster running Crossplane 1.2. All the tests pass successfully except TestConfiguration. That might require updating the configuration image being used for the test.

  • Merge conformance tests into crossplane/crossplane?

    Merge conformance tests into crossplane/crossplane?

    What problem are you facing?

    These conformance tests are effectively integration tests. We intend to version them alongside Crossplane releases, i.e. there will be a 1.2 branch of this repository to correspond to the release-1.2 branch of the crossplane/crossplane repository.

    Merging these tests into crossplane/crossplane (e.g. under a conformance/ directory) would enable Crossplane contributors to update the conformance tests in the same pull request they open to add a new feature. It would also potentially allow us to use the conformance test suite as a general integration test suite.

    How could conformance help solve your problem?

    We could deprecate this repository and move the conformance tests into crossplane/crossplane. We should also assess this repository as it relates to crossplane/test, which could potentially replace this repository in future.

  • Switch to gotestsum

    Switch to gotestsum

    What problem are you facing?

    We currently use https://github.com/jstemmer/go-junit-report to create Sonobuoy compatible junit reports from our tests. It seems like there are several known issues with go-junit-report that are languishing; including that it can't handle cmp output correctly.

    How could conformance help solve your problem?

    We could switch to https://github.com/gotestyourself/gotestsum/, which appears to be the new hotness (and better supported).

  • Test for conformant RBAC management

    Test for conformant RBAC management

    What problem are you facing?

    Crossplane includes an RBAC manager that manages RBAC roles for both Crossplane controllers (e.g. to enable composition and providers to function) and users (e.g. to create roles like crossplane-admin). Deploying the RBAC manager is optional, but I'm not sure whether we should allow distributions of Crossplane to omit it completely.

    How could conformance help solve your problem?

    We should determine whether we should test for RBAC manager conformance, and what exactly we're testing for, then write the tests. Perhaps we could test for only Basic mode support (i.e. the permissions required for Crossplane controllers to function).

  • Increase thoroughness of Provider conformance tests

    Increase thoroughness of Provider conformance tests

    What problem are you facing?

    This repository should define two conformance test suites; one for Crossplane distributions and another for Crossplane providers.

    How could conformance help solve your problem?

    It could flesh out the provider conformance test suite, which currently exists but has no meaningful tests. We should test that:

    • [x] Providers install only cluster scoped CRDs.
    • [x] Providers install only CRDs that appear to be a managed resource or a provider config.
    • [x] Providers install support for at least one managed resource.
    • [x] All defined resources are in the "crossplane" category, and managed resources are in the "managed" category.
    • [ ] A ProviderConfigUsage exists for each extant (managed resource, provider config) tuple.
    • [ ] All managed resources can become 'ready'.
    • [ ] All managed resources emit Kubernetes events.
    • [ ] All managed resources write connection secrets (though for many these secrets would be empty).

    (Edit: consolidated some of the comments below into a checklist here).

Kong Verifier plugin for HSDP API signed requests

Kong Verifier plugin for HSDP API signed requests

Jan 7, 2022
mackerel metric plugin for count lines in log

mackerel metric plugin for count lines in log

Nov 13, 2021
Steampipe plugin for the Hypothesis annotation system

Steampipe plugin for the Hypothesis annotation system

Nov 17, 2021
Simple plugin to enable the /flip command inside of Mattermost

Plugin Starter Template This plugin serves as a starting point for writing a Mattermost plugin. Feel free to base your own plugin off this repository.

Nov 4, 2021
Rollup plugin go wasm

Rollup plugin go wasm

May 11, 2022
A helm plugin that shows a diff explaining what a helm upgrade would change
A helm plugin that shows a diff explaining what a helm upgrade would change

Helm Diff Plugin This is a Helm plugin giving your a preview of what a helm upgrade would change.

Jan 4, 2023
Traefik plugin for MaxMind GeoIP2

Traefik plugin for MaxMind GeoIP2 Traefik plugin that registers a custom middleware for getting data from MaxMind GeoIP databases and pass it downstre

Dec 19, 2021
The Webhooks Listener-Plugin library consists of two component libraries written in GoLang

The Webhooks Listener-Plugin library consists of two component libraries written in GoLang: WebHook Listener Libraries and Plugin (Event Consumer) Libraries.

Feb 3, 2022
This plugin will analyse the JFrog Platform instance and provide the non conformance against the best practices based on the predefines rules.

hello-frog About this plugin This plugin is a template and a functioning example for a basic JFrog CLI plugin. This README shows the expected structur

Nov 30, 2021
Fonetic is a library to assess pronounceablility of a given text

fonetic-go assess pronounciblity of text Introduction Fonetic is a library to assess pronounceablility of a given text. For more information, check ou

Oct 21, 2022
provider-kafka is a Crossplane Provider that is used to manage Kafka resources.

provider-kafka provider-kafka is a Crossplane Provider that is used to manage Kafka resources. Usage Create a provider secret containing a json like t

Oct 29, 2022
An experimental crossplane provider for @zscaler zpa

provider-zpa Crossplane provider for [Zscaler ZPA] The provider built from this repository can be installed into a Crossplane control plane or run sep

Dec 7, 2021
provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters

provider-kubernetes provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters ty

Dec 14, 2022
Crossplane provider to provision and manage Kubernetes objects on (remote) Kubernetes clusters.

provider-kubernetes provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters ty

Jan 3, 2023
Generate Crossplane Providers from any Terraform Provider

Terrajet - Generate Crossplane Providers from any Terraform Provider Terrajet is a code generator framework that allows developers to build code gener

Dec 29, 2022
Crossplane provider for InfluxDB Cloud

provider-template provider-template is a minimal Crossplane Provider that is meant to be used as a template for implementing new Providers. It comes w

Jan 10, 2022
Crossplane provider for InfluxDB Cloud

provider-template provider-template is a minimal Crossplane Provider that is meant to be used as a template for implementing new Providers. It comes w

Jan 10, 2022
Crossplane provider for Confluent Cloud

provider-confluent provider-confluent is a minimal Crossplane Provider that is meant to be used as a template for implementing new Providers. It comes

Feb 4, 2022
A minimal Crossplane Provider For Golang

provider-template provider-template is a minimal Crossplane Provider that is mea

Dec 19, 2021
A minimal Crossplane Provider that is meant to be used as a template for implementing new Providers

provider-template provider-template is a minimal Crossplane Provider that is meant to be used as a template for implementing new Providers. It comes w

Jan 16, 2022