From b3d14ec862e3162e14db10a8c003312e9ca71efe Mon Sep 17 00:00:00 2001 From: Kim Christensen <2461567+kichristensen@users.noreply.github.com> Date: Sat, 24 Aug 2024 22:30:38 +0200 Subject: [PATCH] Do not reference CNAB invocation images in documentation (#3200) * Do not reference CNAB invocation images As CNAB is an implementation detail as this point, we no longer want to use the term 'invocation image'. Instead we should use the term 'bundle image'. This PR ensures that the current references to 'invocation image' is changed to 'bundle image'. Signed-off-by: Kim Christensen --------- Signed-off-by: Kim Christensen Co-authored-by: schristoff <28318173+schristoff@users.noreply.github.com> --- CONTRIBUTING.md | 2 +- cmd/exec/build.go | 2 +- cmd/porter/bundle.go | 12 +++---- cmd/porter/inspect.go | 2 +- cmd/porter/installations.go | 8 ++--- docs/content/architecture-buildtime.md | 2 +- docs/content/architecture-runtime.md | 2 +- docs/content/archive-bundles.md | 4 +-- docs/content/blog/migrate-from-docker-app.md | 2 +- docs/content/design/kubernetes-mixin.md | 4 +-- .../docs/administration/copy-bundles.md | 4 +-- .../docs/administration/inspecting-bundles.md | 6 ++-- docs/content/docs/bundle/custom-dockerfile.md | 10 +++--- docs/content/docs/bundle/manifest/_index.md | 4 +-- .../docs/configuration/configuration.md | 4 +-- .../authoring-a-bundle/distribute-bundles.md | 24 ++++++------- docs/content/docs/faq/_index.md | 4 +-- .../docs/getting-started/migrate-v0-v1.md | 4 +-- .../docs/how-to-guides/work-with-mixins.md | 8 ++--- .../concepts-and-components/_index.md | 2 +- ...ation-images.md => intro-bundle-images.md} | 22 ++++++------ .../intro-configuration.md | 2 +- .../mixins-vs-plugins.md | 4 +-- .../docs/operations/examine-bundles.md | 2 +- .../docs/operations/signing-bundles.md | 6 ++-- docs/content/docs/references/cli/archive.md | 2 +- docs/content/docs/references/cli/build.md | 4 +-- .../docs/references/cli/bundles_archive.md | 2 +- .../docs/references/cli/bundles_build.md | 4 +-- .../docs/references/cli/bundles_inspect.md | 2 +- docs/content/docs/references/cli/inspect.md | 2 +- docs/content/docs/references/cli/install.md | 2 +- .../references/cli/installations_install.md | 2 +- .../references/cli/installations_invoke.md | 2 +- .../references/cli/installations_uninstall.md | 2 +- .../references/cli/installations_upgrade.md | 2 +- docs/content/docs/references/cli/invoke.md | 2 +- docs/content/docs/references/cli/publish.md | 4 +-- docs/content/docs/references/cli/uninstall.md | 2 +- docs/content/docs/references/cli/upgrade.md | 2 +- docs/content/docs/troubleshooting/_index.md | 4 +-- docs/content/mixin-dev-guide/commands.md | 8 ++--- docs/content/wiring.md | 2 +- pkg/build/build.go | 8 ++--- pkg/build/buildkit/buildx.go | 8 ++--- pkg/cnab/cnab-to-oci/registry.go | 2 +- pkg/cnab/extended_bundle.go | 2 +- pkg/cnab/extended_bundle_test.go | 6 ++-- pkg/cnab/provider/action.go | 6 ++-- pkg/config/config.go | 6 ++-- pkg/config/datastore.go | 4 +-- pkg/experimental/experimental.go | 4 +-- pkg/manifest/manifest.go | 12 +++---- pkg/porter/archive.go | 2 +- pkg/porter/build.go | 10 +++--- pkg/porter/helpers.go | 4 +-- pkg/porter/inspect.go | 4 +-- pkg/porter/install.go | 4 +-- pkg/porter/publish.go | 36 +++++++++---------- pkg/porter/publish_test.go | 2 +- pkg/porter/stamp.go | 6 ++-- pkg/porter/testdata/schema.json | 18 +++++----- pkg/runtime/runtime.go | 2 +- pkg/runtime/runtime_manifest.go | 8 ++--- pkg/runtime/runtime_manifest_test.go | 2 +- pkg/schema/manifest.schema.json | 18 +++++----- pkg/schema/manifest.v1.1.0.schema.json | 18 +++++----- pkg/signing/signer.go | 6 ++-- pkg/templates/templates.go | 4 +-- pkg/templates/templates/create/.dockerignore | 2 +- pkg/templates/templates/create/README.md | 8 ++--- .../create/template.buildkit.Dockerfile | 2 +- tests/integration/pull_test.go | 2 +- .../integration/registry_integration_test.go | 2 +- tests/integration/signing_test.go | 6 ++-- .../bundles/exec-outputs/.dockerignore | 2 +- tests/integration/testdata/schema/schema.json | 18 +++++----- tests/testdata/myapp/.dockerignore | 2 +- tests/testdata/mybuns/.dockerignore | 2 +- tests/testdata/mydb/.dockerignore | 2 +- tests/testdata/myenv/.dockerignore | 2 +- tests/testdata/myinfra/.dockerignore | 2 +- tests/testdata/mysqldb/.dockerignore | 2 +- .../01G1VJHH4WTCGB455NG5VTMM1Y.json | 2 +- 84 files changed, 228 insertions(+), 226 deletions(-) rename docs/content/docs/introduction/concepts-and-components/{intro-invocation-images.md => intro-bundle-images.md} (89%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6fd2f30e6..43d2cc080 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -573,7 +573,7 @@ dependency injection and testing strategies. this repository * **docs**: our website * **pkg** - * **build**: implements building the invocation image. + * **build**: implements building the bundle image. * **cache**: handles the cache of bundles that have been pulled by commands like `porter install --reference`. * **cnab**: deals with the CNAB spec diff --git a/cmd/exec/build.go b/cmd/exec/build.go index e84b17f23..e15805085 100644 --- a/cmd/exec/build.go +++ b/cmd/exec/build.go @@ -10,7 +10,7 @@ import ( func buildBuildCommand(m *exec.Mixin) *cobra.Command { cmd := &cobra.Command{ Use: "build", - Short: "Generate Dockerfile lines for the bundle invocation image", + Short: "Generate Dockerfile lines for the bundle image", Run: func(cmd *cobra.Command, args []string) { fmt.Fprintln(m.Config.Out, "# exec mixin has no buildtime dependencies") }, diff --git a/cmd/porter/bundle.go b/cmd/porter/bundle.go index 19cf2c727..164dd30d9 100644 --- a/cmd/porter/bundle.go +++ b/cmd/porter/bundle.go @@ -53,7 +53,7 @@ func buildBundleBuildCommand(p *porter.Porter) *cobra.Command { cmd := &cobra.Command{ Use: "build", Short: "Build a bundle", - Long: `Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the invocation image. + Long: `Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the bundle image. The docker driver builds the bundle image using the local Docker host. To use a remote Docker host, set the following environment variables: DOCKER_HOST (required) @@ -85,7 +85,7 @@ The docker driver builds the bundle image using the local Docker host. To use a f.StringVarP(&opts.Dir, "dir", "d", "", "Path to the build context directory where all bundle assets are located. Defaults to the current directory.") f.StringVar(&opts.Driver, "driver", porter.BuildDriverDefault, - fmt.Sprintf("Driver for building the invocation image. Allowed values are: %s", strings.Join(porter.BuildDriverAllowedValues, ", "))) + fmt.Sprintf("Driver for building the bundle image. Allowed values are: %s", strings.Join(porter.BuildDriverAllowedValues, ", "))) _ = f.MarkHidden("driver") // Hide the driver flag since there aren't any choices to make right now f.StringArrayVar(&opts.BuildArgs, "build-arg", nil, "Set build arguments in the template Dockerfile (format: NAME=VALUE). May be specified multiple times. Max length is 5,000 characters.") @@ -94,7 +94,7 @@ The docker driver builds the bundle image using the local Docker host. To use a f.StringArrayVar(&opts.Secrets, "secret", nil, "Secret file to expose to the build (format: id=mysecret,src=/local/secret). Custom values are accessible as build arguments in the template Dockerfile and in the manifest using template variables. May be specified multiple times.") f.BoolVar(&opts.NoCache, "no-cache", false, - "Do not use the Docker cache when building the bundle's invocation image.") + "Do not use the Docker cache when building the bundle image.") f.StringArrayVar(&opts.Customs, "custom", nil, "Define an individual key-value pair for the custom section in the form of NAME=VALUE. Use dot notation to specify a nested custom field. May be specified multiple times. Max length is 5,000 characters when used as a build argument.") f.BoolVar(&opts.InsecureRegistry, "insecure-registry", false, @@ -143,9 +143,9 @@ func buildBundlePublishCommand(p *porter.Porter) *cobra.Command { cmd := cobra.Command{ Use: "publish", Short: "Publish a bundle", - Long: `Publishes a bundle by pushing the invocation image and bundle to a registry. + Long: `Publishes a bundle by pushing the bundle image and bundle to a registry. -Note: if overrides for registry/tag/reference are provided, this command only re-tags the invocation image and bundle; it does not re-build the bundle.`, +Note: if overrides for registry/tag/reference are provided, this command only re-tags the bundle image and bundle; it does not re-build the bundle.`, Example: ` porter bundle publish porter bundle publish --file myapp/porter.yaml porter bundle publish --dir myapp @@ -188,7 +188,7 @@ func buildBundleArchiveCommand(p *porter.Porter) *cobra.Command { cmd := cobra.Command{ Use: "archive FILENAME --reference PUBLISHED_BUNDLE", Short: "Archive a bundle from a reference", - Long: "Archives a bundle by generating a gzipped tar archive containing the bundle, invocation image and any referenced images.", + Long: "Archives a bundle by generating a gzipped tar archive containing the bundle, bundle image and any referenced images.", Example: ` porter bundle archive mybun.tgz --reference ghcr.io/getporter/examples/porter-hello:v0.2.0 porter bundle archive mybun.tgz --reference localhost:5000/ghcr.io/getporter/examples/porter-hello:v0.2.0 --force porter bundle archive mybun.tgz --compression NoCompression --reference ghcr.io/getporter/examples/porter-hello:v0.2.0 diff --git a/cmd/porter/inspect.go b/cmd/porter/inspect.go index b838718a1..9c1cfc463 100644 --- a/cmd/porter/inspect.go +++ b/cmd/porter/inspect.go @@ -10,7 +10,7 @@ func buildBundleInspectCommand(p *porter.Porter) *cobra.Command { cmd := cobra.Command{ Use: "inspect REFERENCE", Short: "Inspect a bundle", - Long: `Inspect a bundle by printing the invocation images and any related images images. + Long: `Inspect a bundle by printing the bundle images and any related images images. If you would like more information about the bundle, the porter explain command will provide additional information, like parameters, credentials, outputs and custom actions available. diff --git a/cmd/porter/installations.go b/cmd/porter/installations.go index 12ed22ca7..30e6586d8 100644 --- a/cmd/porter/installations.go +++ b/cmd/porter/installations.go @@ -224,7 +224,7 @@ The first argument is the name of the installation to create. This defaults to t Once a bundle has been successfully installed, the install action cannot be repeated. This is a precaution to avoid accidentally overwriting an existing installation. If you need to re-run install, which is common when authoring a bundle, you can use the --force flag to by-pass this check. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: @@ -274,7 +274,7 @@ func buildInstallationUpgradeCommand(p *porter.Porter) *cobra.Command { The first argument is the installation name to upgrade. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: @@ -322,7 +322,7 @@ func buildInstallationInvokeCommand(p *porter.Porter) *cobra.Command { The first argument is the installation name upon which to invoke the action. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: @@ -370,7 +370,7 @@ func buildInstallationUninstallCommand(p *porter.Porter) *cobra.Command { The first argument is the installation name to uninstall. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/architecture-buildtime.md b/docs/content/architecture-buildtime.md index e3b7b4ea8..d9a744839 100644 --- a/docs/content/architecture-buildtime.md +++ b/docs/content/architecture-buildtime.md @@ -18,7 +18,7 @@ Mixins are cached in your PORTER_HOME directory, and the kubernetes mixin can be Porter does not support specifying which version of a mixin to use in a bundle yet. You can follow the [Mixins are Bundles proposal](https://github.com/getporter/proposals/blob/main/pep/005-mixins-are-bundles.md) to keep track of that feature's progress. -When the bundle author runs `porter build`, Porter first generates a Dockerfile to create an image for the bundle (known as the invocation image or installer). +When the bundle author runs `porter build`, Porter first generates a Dockerfile to create an image for the bundle (known as the bundle image or installer). You can define your own [custom Dockerfile](/docs/bundle/custom-dockerfile/) to customize and optimize the image. The Dockerfile contains the following: a base image (debian), additional customizations generated by the mixins, and a COPY statement to include the files contained in the bundle directory where the porter.yaml file is located. A copy of the Porter runtime, the mixin runtimes and the porter.yaml file are copied into the bundle. diff --git a/docs/content/architecture-runtime.md b/docs/content/architecture-runtime.md index 67c74b2ad..8368746d4 100644 --- a/docs/content/architecture-runtime.md +++ b/docs/content/architecture-runtime.md @@ -9,7 +9,7 @@ The "Porter runtime" specifically refers to the embedded copy of the porter-runt Below is an outline of what happens when a bundle is executed: 1. Porter identifies all parameters and credentials, resolving parameter and credentials sets against the host environment and any configured secret stores. -2. Porter runs a container using the bundle's invocation image, injecting the parameters and credentials as files and/or environment variables. +2. Porter runs a container using the bundle image, injecting the parameters and credentials as files and/or environment variables. 3. The entrypoint of the container is the Porter runtime. It parses the porter.yaml file embedded in the bundle, and executes the steps defined for the current action (such as install or upgrade). 4. For each step, Porter calls the corresponding mixins which are also embedded in the bundle. 5. The mixin performs an action, most commonly translating the yaml snippet for the step into a call to a development tool. For example, the helm3 mixin handles calling out to the helm CLI. diff --git a/docs/content/archive-bundles.md b/docs/content/archive-bundles.md index f60c05264..1c3325b27 100644 --- a/docs/content/archive-bundles.md +++ b/docs/content/archive-bundles.md @@ -3,7 +3,7 @@ title: Archiving Bundles description: Archiving Bundles with Porter --- -Porter allows you to share bundles by [publishing](/distributing-bundles/) them to an OCI registry. Porter also allows you to copy a bundle from one registry to another. Using these commands, bundle users have flexibility in how they leverage published bundles. What if you want to use a published bundle on a disconnected or edge network that has limited connectivity? The `porter archive` command and the `porter publish` commands allow you to take the bundle from a registry on one network, move it to the network or location, and republish it into another registry for use within that environment. The generated bundle archive contains the CNAB `bundle.json`, along with an OCI [image layout](https://github.com/opencontainers/image-spec/blob/master/image-layout.md) containing the invocation image and any images declared in the `images` section of the `bundle.json`. This enables the entire bundle to be easily moved into a private data center or across an air-gapped network, and republished within that environment. +Porter allows you to share bundles by [publishing](/distributing-bundles/) them to an OCI registry. Porter also allows you to copy a bundle from one registry to another. Using these commands, bundle users have flexibility in how they leverage published bundles. What if you want to use a published bundle on a disconnected or edge network that has limited connectivity? The `porter archive` command and the `porter publish` commands allow you to take the bundle from a registry on one network, move it to the network or location, and republish it into another registry for use within that environment. The generated bundle archive contains the CNAB `bundle.json`, along with an OCI [image layout](https://github.com/opencontainers/image-spec/blob/master/image-layout.md) containing the bundle image and any images declared in the `images` section of the `bundle.json`. This enables the entire bundle to be easily moved into a private data center or across an air-gapped network, and republished within that environment. For a working example of how to move a bundle across an airgap, read [Example: Airgapped Environments](/examples/airgap/). @@ -56,7 +56,7 @@ drwxr-xr-x 0 jeremyrickard staff 0 Oct 18 10:27 ./artifacts/layout/blobs/ -rw-r--r-- 0 jeremyrickard staff 2955 Oct 18 10:27 ./bundle.json ``` -In this archive file, you will see the `bundle.json`, along with all of the artifacts that represent the OCI image layout. In this case, we had two images, the invocation image and an application image. They are both written to the `artifacts/` directory as part of the OCI image layout. +In this archive file, you will see the `bundle.json`, along with all of the artifacts that represent the OCI image layout. In this case, we had two images, the bundle image and an application image. They are both written to the `artifacts/` directory as part of the OCI image layout. ## Publish a Bundle Archive diff --git a/docs/content/blog/migrate-from-docker-app.md b/docs/content/blog/migrate-from-docker-app.md index 2ce2e9cb5..bbc0e8339 100644 --- a/docs/content/blog/migrate-from-docker-app.md +++ b/docs/content/blog/migrate-from-docker-app.md @@ -194,7 +194,7 @@ We will use the [docker-compose mixin] to migrate an existing Docker App to Port ```console $ porter publish - Pushing CNAB invocation image... + Pushing CNAB bundle image... The push refers to repository [docker.io/carolynvs/my-docker-app-installer] a5fd17ef8522: Preparing 878a51fed4d7: Preparing diff --git a/docs/content/design/kubernetes-mixin.md b/docs/content/design/kubernetes-mixin.md index a1a427430..ae15c1e28 100644 --- a/docs/content/design/kubernetes-mixin.md +++ b/docs/content/design/kubernetes-mixin.md @@ -15,7 +15,7 @@ In order to build a CNAB with the kubernetes mixin, the bundle author should pla ## Buildtime -Rather than trying to rebuild the functionality of `kubectl`, this mixin will contribute lines to the invocation image Dockerfile that will result in `kubectl` being installed: +Rather than trying to rebuild the functionality of `kubectl`, this mixin will contribute lines to the bundle image Dockerfile that will result in `kubectl` being installed: ``` RUN apt-get update && \ @@ -57,7 +57,7 @@ The mixin allows bundle authors to specify the following parameters on install: ### Upgrade - At runtime, the mixin will use the `kubectl apply` command when an `upgrade` action is specified. This will result in the resources defined in the supplied manifests being created or deleted, as appropriate. As the manifests will be contained within the bundle's invocation image, an upgrade action against an invocation image that was used for install is a no-op. The use of the `apply` command will allow the use of the `wait` flag The mixin will not support all of the [options](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) available, specifically `dry-run`, or options related to editing or deleting resources. Available parameters are spelled out below. + At runtime, the mixin will use the `kubectl apply` command when an `upgrade` action is specified. This will result in the resources defined in the supplied manifests being created or deleted, as appropriate. As the manifests will be contained within the bundle image, an upgrade action against an bundle image that was used for install is a no-op. The use of the `apply` command will allow the use of the `wait` flag The mixin will not support all of the [options](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) available, specifically `dry-run`, or options related to editing or deleting resources. Available parameters are spelled out below. | Parameter | Type | Description | Default | |-----------|------|-------------|---------| diff --git a/docs/content/docs/administration/copy-bundles.md b/docs/content/docs/administration/copy-bundles.md index 6da5fa3f0..907620b23 100644 --- a/docs/content/docs/administration/copy-bundles.md +++ b/docs/content/docs/administration/copy-bundles.md @@ -6,7 +6,7 @@ aliases: - /copying-bundles/ --- -Porter allows you to copy a bundle, and all associated images, from one registry to another. This includes both the invocation images and the images defined in the `images` section of the bundle. For example, consider the following `images` map: +Porter allows you to copy a bundle, and all associated images, from one registry to another. This includes both the bundle images and the images defined in the `images` section of the bundle. For example, consider the following `images` map: ```yaml images: @@ -22,7 +22,7 @@ images: digest: "sha256:85b1a9b4b60a4cf73a23517dad677e64edf467107fa7d58fce9c50e6a3e4c914" ``` -When this bundle is copied, the invocation image, along with the `backend` and `websvc` images will be copied to the new repository. If the bundle author has properly used image [wiring](/wiring/#wiring-images), the new image references will be available within the bundle at run-time. +When this bundle is copied, the bundle image, along with the `backend` and `websvc` images will be copied to the new repository. If the bundle author has properly used image [wiring](/wiring/#wiring-images), the new image references will be available within the bundle at run-time. This is useful when you have restrictions on where you can pull Docker images from or would otherwise like to have control over assets you will be using. Any operation on the copied bundle will utilize these copied images as well. IIf you'd like to rename something within a registry, Porter also allows you to copy from one bundle tag to another bundle tag inside the same registry. diff --git a/docs/content/docs/administration/inspecting-bundles.md b/docs/content/docs/administration/inspecting-bundles.md index 1debd1125..8f3632cf8 100644 --- a/docs/content/docs/administration/inspecting-bundles.md +++ b/docs/content/docs/administration/inspecting-bundles.md @@ -9,7 +9,7 @@ aliases: You've found a bundle that you'd like to use, but you'd like to what images will be used after you install the bundle. You can use the `porter inspect` command to see this information. If you'd like to see additional information, like parameters, credentials, and outputs, see the [explain](/docs/operations/examine-bundles/) command. -When a bundle is published, the images that it will use are copied into the location of the published bundle. This simplifies access control and management of artifacts in the repository. The `inspect` command will show the invocation images, as well as any referenced images, that will be used as a result of performing actions like install nad upgrade. For each image, you will see the image reference that will be used, along with the original image reference that the image was copied from. +When a bundle is published, the images that it will use are copied into the location of the published bundle. This simplifies access control and management of artifacts in the repository. The `inspect` command will show the bundle images, as well as any referenced images, that will be used as a result of performing actions like install nad upgrade. For each image, you will see the image reference that will be used, along with the original image reference that the image was copied from. ```console $ porter inspect jeremyrickard/porter-do-bundle:v1.0.0 @@ -17,7 +17,7 @@ Name: spring-music Description: Run the Spring Music Service on Kubernetes and Digital Ocean PostgreSQL Version: 1.0.0 -Invocation Images: +Bundle Images: Image Type Digest Original Image jeremyrickard/porter-do-bundle@sha256:2fb1f0abdd407e72393e40f411ba60e3eaae505161f49f5fd4c801e1528bbc3f docker sha256:2fb1f0abdd407e72393e40f411ba60e3eaae505161f49f5fd4c801e1528bbc3f jeremyrickard/porter-do:v1.0.0 @@ -34,7 +34,7 @@ Name: spring-music Description: Run the Spring Music Service on Kubernetes and Digital Ocean PostgreSQL Version: 1.0.0 -Invocation Images: +Bundle Images: Image Type Digest Original Image jrrporter.azurecr.io/do-porter-from-archive@sha256:74b8622a8b7f09a6802a3fff166c8d1827c9e78ac4e4b9e71e0de872fa5077be docker sha256:74b8622a8b7f09a6802a3fff166c8d1827c9e78ac4e4b9e71e0de872fa5077be jrrporter.azurecr.io/do-porter-from-archive/porter-do@sha256:74b8622a8b7f09a6802a3fff166c8d1827c9e78ac4e4b9e71e0de872fa5077be diff --git a/docs/content/docs/bundle/custom-dockerfile.md b/docs/content/docs/bundle/custom-dockerfile.md index f626f208b..ddc8e42a2 100644 --- a/docs/content/docs/bundle/custom-dockerfile.md +++ b/docs/content/docs/bundle/custom-dockerfile.md @@ -5,15 +5,15 @@ aliases: - /custom-dockerfile/ --- -Porter automatically generates a Dockerfile and uses it to build the invocation image for your bundle. +Porter automatically generates a Dockerfile and uses it to build the bundle image for your bundle. It runs the container as an unprivileged user with membership in the root group, copies all the files from the current directory into the bundle, and installs SSL certificates. -Sometimes you may want to full control over your bundle's invocation image, for example to install additional software used by the bundle. +Sometimes you may want to full control over your bundle image, for example to install additional software used by the bundle. When you run porter create, a template Dockerfile is created for you in the current directory named **template.Dockerfile**: ```Dockerfile # syntax=docker/dockerfile-upstream:1.4.0 -# This is a template Dockerfile for the bundle's invocation image +# This is a template Dockerfile for the bundle image # You can customize it to use different base images, install tools and copy configuration files. # # Porter will use it as a template and append lines to it for the mixins @@ -155,7 +155,7 @@ You can control where they are injected by placing a comment in your Dockerfile When that line is omitted, the lines are appended to the end of the template. The location of this comment can significantly impact the time it takes to rebuild your bundle, due to image layers and caching. -By default, this line is placed before copying your local files into the bundle, so that you can iterate on your scripts and on the porter manifest without having to rebuild those layers of the invocation image. +By default, this line is placed before copying your local files into the bundle, so that you can iterate on your scripts and on the porter manifest without having to rebuild those layers of the bundle image. # Variables @@ -193,7 +193,7 @@ COPY myfile /home/${BUNDLE_USER}/ ## BUNDLE_DIR -The **BUNDLE_DIR** argument is declared in the [PORTER_INIT](#porter_init) section is the path to the bundle directory inside the invocation image. +The **BUNDLE_DIR** argument is declared in the [PORTER_INIT](#porter_init) section is the path to the bundle directory inside the bundle image. You may then use this when copying files from the local filesystem to the bundle's working directory. We strongly recommend that you always use this variable and do not copy files into directories outside BUNDLE_DIR. If you do, you are responsible for setting the file permissions so that the bundle's user ([BUNDLE_USER](#bundle_user)) and the bundle's group (root) have the same permissions. diff --git a/docs/content/docs/bundle/manifest/_index.md b/docs/content/docs/bundle/manifest/_index.md index d7702310d..8d9fb79e0 100644 --- a/docs/content/docs/bundle/manifest/_index.md +++ b/docs/content/docs/bundle/manifest/_index.md @@ -67,7 +67,7 @@ maintainers: * `dockerfile`: OPTIONAL. The relative path to a Dockerfile to use as a template during `porter build`. See [Custom Dockerfile](/docs/bundle/custom-dockerfile/) for details on how to use a custom Dockerfile. * `custom`: OPTIONAL. A map of [custom bundle metadata](https://github.com/cnabio/cnab-spec/blob/master/101-bundle-json.md#custom-extensions). - These values are stored in the bundle definition and can be queried without pulling the invocation image. + These values are stored in the bundle definition and can be queried without pulling the bundle image. We recommend not storing large values in the custom field and to save large values as files in the bundle directory instead. * `maintainers`: OPTIONAL. A map of bundle maintainers. Per maintainer, `name`, `email`, and `url` can be specified. Every field is optional. @@ -598,7 +598,7 @@ When the bundle is executed, this elevated privilege must be explicitly granted **Configuration:** - * `privileged: BOOLEAN` - OPTIONAL. Whether or not the `--privileged` flag should be set when the bundle's invocation image runs. Defaults to false. + * `privileged: BOOLEAN` - OPTIONAL. Whether or not the `--privileged` flag should be set when the bundle's bundle image runs. Defaults to false. Example: diff --git a/docs/content/docs/configuration/configuration.md b/docs/content/docs/configuration/configuration.md index 70be7b547..f47333fc3 100644 --- a/docs/content/docs/configuration/configuration.md +++ b/docs/content/docs/configuration/configuration.md @@ -113,7 +113,7 @@ default-secrets: "mysecrets" default-secrets-plugin: "kubernetes.secret" # Use the signer configuration name mysigner. -# If not specified, bundles and invocation images cannot be signed. +# If not specified, bundles and bundle images cannot be signed. default-signer: "mysigner" # Defines storage accounts @@ -303,7 +303,7 @@ When it is completed, it is used to activate the features from [PEP003 - Advance ### Full control Dockerfile The `full-control-dockerfile` experimental flag disables all Dockerfile generation when building bundles. -When enabled Porter will use the file referenced by `dockerfile` in the Porter manifest when building the invocation image *without modifying* it in any way. +When enabled Porter will use the file referenced by `dockerfile` in the Porter manifest when building the bundle image *without modifying* it in any way. Ie. Porter will not process `# PORTER_x` placeholders, nor inject any user configuration and `CMD` statements. It is up to the bundle author to ensure that the contents of the Dockerfile contains the necessary tools for any mixins to function and a layout that can be executed as a Porter bundle. diff --git a/docs/content/docs/development/authoring-a-bundle/distribute-bundles.md b/docs/content/docs/development/authoring-a-bundle/distribute-bundles.md index 4f3c22b73..eea78fe21 100644 --- a/docs/content/docs/development/authoring-a-bundle/distribute-bundles.md +++ b/docs/content/docs/development/authoring-a-bundle/distribute-bundles.md @@ -6,7 +6,7 @@ aliases: - /distributing-bundles/ --- -Once you have built a bundle with Porter, the next step is to share the bundle and invocation image so others can use it. Porter uses OCI (Docker) registries to share both CNAB bundle manifest and invocation images. +Once you have built a bundle with Porter, the next step is to share the bundle and bundle image so others can use it. Porter uses OCI (Docker) registries to share both CNAB bundle manifest and bundle images. - [Preparing For Bundle Publishing](#preparing-for-bundle-publishing) - [Bundle Publish](#bundle-publish) @@ -15,11 +15,11 @@ Once you have built a bundle with Porter, the next step is to share the bundle a ## Preparing For Bundle Publishing -Before you can publish your bundle, you must first run a `porter build` command. This will create the invocation image so it can be pushed to an OCI (Docker) registry along with your CNAB bundle manifest. It's a good idea to work with your bundle and test it locally before you publish it to a registry. +Before you can publish your bundle, you must first run a `porter build` command. This will create the bundle image so it can be pushed to an OCI (Docker) registry along with your CNAB bundle manifest. It's a good idea to work with your bundle and test it locally before you publish it to a registry. ## Bundle Publish -Once you are satisfied with the bundle, the next step is to publish the bundle! Bundle publishing involves pushing both the invocation image and the CNAB bundle manifest to an OCI registry. Porter uses [docker tags](https://docs.docker.com/engine/reference/commandline/tag/) for both invocation images and CNAB bundle manifests. These are defined in your `porter.yaml` file: +Once you are satisfied with the bundle, the next step is to publish the bundle! Bundle publishing involves pushing both the bundle image and the CNAB bundle manifest to an OCI registry. Porter uses [docker tags](https://docs.docker.com/engine/reference/commandline/tag/) for both bundle images and CNAB bundle manifests. These are defined in your `porter.yaml` file: ```yaml name: kubernetes @@ -30,15 +30,15 @@ registry: getporter This YAML snippet indicates that the bundle will be built and tagged as `getporter/kubernetes:v0.2.0`. This full bundle reference is constructed from the provided `registry`, `name` and `version` fields. We recommend using [semantic versioning](https://semver.org/) for the bundle version. -The generated invocation image name will be auto-derived from the same combination of `registry`, `name` and `version`. Using the example above, an invocation image with the name of `getporter/kubernetes:porter-HASH` will be built. +The generated bundle image name will be auto-derived from the same combination of `registry`, `name` and `version`. Using the example above, an bundle image with the name of `getporter/kubernetes:porter-HASH` will be built. -Once you have provided values for the fields above, run the `porter build` command one last time to verify that your invocation image can be successfully built. +Once you have provided values for the fields above, run the `porter build` command one last time to verify that your bundle image can be successfully built. -Next, run the `porter publish` command in order to push the invocation image to the specified repository and to regenerate a CNAB bundle manifest using this newly pushed image. You should see output like the following: +Next, run the `porter publish` command in order to push the bundle image to the specified repository and to regenerate a CNAB bundle manifest using this newly pushed image. You should see output like the following: ``` $ porter publish -Pushing CNAB invocation image... +Pushing CNAB bundle image... The push refers to repository [docker.io/getporter/kubernetes] 0f4d408243ab: Preparing 6573f19b0ef5: Preparing @@ -66,7 +66,7 @@ Bundle tag docker.io/getporter/kubernetes:v0.2.0 pushed successfully, with diges Note: you can safely ignore the `WARN[0005] reference for unknown type: application/vnd.cnab.config.v1+json` message, if it appears. -When this command is complete, your CNAB bundle manifest and invocation image will have been successfully pushed to the specified OCI registry. It can then be installed with the `porter install` command: +When this command is complete, your CNAB bundle manifest and bundle image will have been successfully pushed to the specified OCI registry. It can then be installed with the `porter install` command: ``` $ porter install --reference getporter/kubernetes:v0.2.0 -c kool-kred @@ -84,7 +84,7 @@ executing porter install configuration from /cnab/app/porter.yaml Install Hello World App ``` -The latter example ensures immutability for your bundle. After you've initially run `porter publish`, your tagged reference, such as `getporter/kubernetes:v0.2.0` can be updated with subsequent `porter publish` commands. However, the digested version `getporter/kubernetes@sha256:10a41e6d5af73f2cebe4bf6d368bdf5ccc39e641117051d30f88cf0c69e4e456` will not change. If you'd like to publish different version of the bundle, you will need to update minimally the `tag` attribute and optionally the `invocationImage` attribute, before running `porter publish` again. (Porter will detect the manifest change and automatically run a new bundle and invocation image build prior to publishing.) +The latter example ensures immutability for your bundle. After you've initially run `porter publish`, your tagged reference, such as `getporter/kubernetes:v0.2.0` can be updated with subsequent `porter publish` commands. However, the digested version `getporter/kubernetes@sha256:10a41e6d5af73f2cebe4bf6d368bdf5ccc39e641117051d30f88cf0c69e4e456` will not change. If you'd like to publish different version of the bundle, you will need to update minimally the `tag` attribute, before running `porter publish` again. (Porter will detect the manifest change and automatically run a new bundle and bundle image build prior to publishing.) ## Publish Archived Bundles @@ -102,7 +102,7 @@ references and instead should use the [images] section and templating so that th are referencing the published location of the image. - REGISTRY/ORG/BUNDLE:TAG - - REGISTRY/ORG/BUNDLE@**INVOCATION_IMAGE_DIGEST** + - REGISTRY/ORG/BUNDLE@**BUNDLE_IMAGE_DIGEST** - REGISTRY/ORG/BUNDLE@**REFERENCED_IMAGE_1_DIGEST** - REGISTRY/ORG/BUNDLE@**REFERENCED_IMAGE_2_DIGEST** @@ -124,7 +124,7 @@ images: digest: "sha256:8f1133d81f1b078c865cdb11d17d1ff15f55c449d3eecca50190eed0f5e5e26f" ``` -When this bundle is published, both the invocation image and the spring-music +When this bundle is published, both the bundle image and the spring-music image will be copied and stored in the context of the bundle. To see this in action, you can use the `porter inspect` command to see what images will actually be used for a given bundle. @@ -134,7 +134,7 @@ Name: spring-music Description: Run the Spring Music Service on Kubernetes and Digital Ocean PostgreSQL Version: 0.5.0 -Invocation Images: +Bundle Images: Image Type Digest Original Image jeremyrickard/porter-do-bundle@sha256:74b86... docker sha256:74b86... jeremyrickard/porter-do-bundle-installer:v0.5.0 diff --git a/docs/content/docs/faq/_index.md b/docs/content/docs/faq/_index.md index 081a4b230..ad44854e0 100644 --- a/docs/content/docs/faq/_index.md +++ b/docs/content/docs/faq/_index.md @@ -11,7 +11,7 @@ aliases: - [Can I use Porter bundles with other CNAB tools?](#can-i-use-porter-bundles-with-other-cnab-tools) - [Does Porter solve something that Ansible, Terraform, etc does not?](#does-porter-solve-something-that-ansible-terraform-etc-does-not) - [If an upgrade fails, can I roll back?](#if-an-upgrade-fails-can-i-roll-back) -- [How do I run commands that aren't in the default invocation image?](#how-do-i-run-commands-that-arent-in-the-default-invocation-image) +- [How do I run commands that aren't in the default bundle image?](#how-do-i-run-commands-that-arent-in-the-default-bundle-image) - [Are mixins just wrappers around OS or executable calls?](#are-mixins-just-wrappers-around-os-or-executable-calls) - [Does Porter have its own registry?](#does-porter-have-its-own-registry) - [What do mixins do?](#what-do-mixins-do) @@ -94,7 +94,7 @@ and have an instance ID they would like to store and use later, it's up to the bundle author to find a spot to store that data right now. There isn't a standard mechanism defined by the CNAB spec yet. -## How do I run commands that aren't in the default invocation image? +## How do I run commands that aren't in the default bundle image? When you create a new bundle, porter generates Dockerfile.tmpl file for you. In the porter.yaml you can specify `dockerfile: dockerfile.tmpl` to tell Porter diff --git a/docs/content/docs/getting-started/migrate-v0-v1.md b/docs/content/docs/getting-started/migrate-v0-v1.md index e4e19ff4c..cd3f23b52 100644 --- a/docs/content/docs/getting-started/migrate-v0-v1.md +++ b/docs/content/docs/getting-started/migrate-v0-v1.md @@ -180,8 +180,8 @@ To upgrade a bundle for use with Porter v1: 2. Add a `schemaVersion: 1.0.0-alpha.1` to the top of the file 3. The `tag` field has been replaced by `reference`. We recommend using `registry` instead of `reference`, but you may continue to use it to completely control where the bundle is published. 4. The `invocationImage` field has been deprecated and is no longer available. - Porter now generates the invocation image name using a hash generated from the bundle's metadata using the following format: BUNDLE_REPOSITORY:porter-HASH. - We also no longer push the invocation image to a separate repository, so if you used to rely on the BUNDLE_NAME-installer naming convention, that is not available going forward. + Porter now generates the bundle image name using a hash generated from the bundle's metadata using the following format: BUNDLE_REPOSITORY:porter-HASH. + We also no longer push the bundle image to a separate repository, so if you used to rely on the BUNDLE_NAME-installer naming convention, that is not available going forward. 5. If the bundle defines dependencies, the dependency list has been moved from under `dependences` to under `dependencies.requires`, and the `reference` and `version` fields moved under a new field `bundle`. ```yaml diff --git a/docs/content/docs/how-to-guides/work-with-mixins.md b/docs/content/docs/how-to-guides/work-with-mixins.md index fb09be01f..1134f37b9 100644 --- a/docs/content/docs/how-to-guides/work-with-mixins.md +++ b/docs/content/docs/how-to-guides/work-with-mixins.md @@ -34,14 +34,14 @@ install: ## Mixin API -Porter defines a contract that mixins must fulfill in order to be included in the Porter ecosystem. This contract specifies how Porter will execute the mixins, as show above, but also specifies how the mixin is used to build the invocation image for the bundle. Additionally, the contract specifies how a mixin can specify the inputs it can accept and the outputs that it can provide. +Porter defines a contract that mixins must fulfill in order to be included in the Porter ecosystem. This contract specifies how Porter will execute the mixins, as show above, but also specifies how the mixin is used to build the bundle image for the bundle. Additionally, the contract specifies how a mixin can specify the inputs it can accept and the outputs that it can provide. Here's a diagram that illustrates how mixins fits into Porter's execution flow: ### Build Time -The previous example introduced how mixins are used when a bundle is executed. In the case of the `exec` mixin, the resulting bundle invocation image already has everything needed to execute the mixin. Other mixins may require additional runtime software. The `helm` mixin, for example, requires the [Helm](https://helm.sh/) client at runtime. Porter is responsible for building the invocation image for the bundle, so it needs to know what each mixin will need so that it can be included in the bundle. The mixin is responsible for providing any relevant lines to ensure that the generated invocation image Dockerfile has all required runtime components. Porter expects that the mixin will provide any relevant Dockerfile additions through a `build` command. The `build` should output any necessary Dockerfile commands to standard out. To see this in action, consider the `helm` mixin: +The previous example introduced how mixins are used when a bundle is executed. In the case of the `exec` mixin, the resulting bundle image already has everything needed to execute the mixin. Other mixins may require additional runtime software. The `helm` mixin, for example, requires the [Helm](https://helm.sh/) client at runtime. Porter is responsible for building the bundle image for the bundle, so it needs to know what each mixin will need so that it can be included in the bundle. The mixin is responsible for providing any relevant lines to ensure that the generated bundle image Dockerfile has all required runtime components. Porter expects that the mixin will provide any relevant Dockerfile additions through a `build` command. The `build` should output any necessary Dockerfile commands to standard out. To see this in action, consider the `helm` mixin: ```console $ ./bin/mixins/helm/helm build @@ -58,7 +58,7 @@ In this case, the `helm` mixin will first run apt-get update and then install `c ### Run Time -The [CNAB specification](https://github.com/cnabio/cnab-spec/blob/master/103-bundle-runtime.md) specifies three actions that an invocation image should support: +The [CNAB specification](https://github.com/cnabio/cnab-spec/blob/master/103-bundle-runtime.md) specifies three actions that an bundle image should support: - install - upgrade @@ -74,7 +74,7 @@ Usage: helm [command] Available Commands: - build Generate Dockerfile lines for the bundle invocation image + build Generate Dockerfile lines for the bundle image help Help about any command install Execute the install functionality of this mixin uninstall Execute the uninstall functionality of this mixin diff --git a/docs/content/docs/introduction/concepts-and-components/_index.md b/docs/content/docs/introduction/concepts-and-components/_index.md index 9859c2632..3ed829f1a 100644 --- a/docs/content/docs/introduction/concepts-and-components/_index.md +++ b/docs/content/docs/introduction/concepts-and-components/_index.md @@ -11,7 +11,7 @@ description: "" {{< card link="intro-configuration/" title="Configuration" >}} {{< card link="intro-credentials/" title="Credentials" >}} {{< card link="intro-desired-state/" title="Desired State" >}} -{{< card link="intro-invocation-images/" title="Invocation Images" >}} +{{< card link="intro-bundle-images/" title="Bundle Images" >}} {{< card link="intro-mixins/" title="Mixins" >}} {{< card link="mixins-vs-plugins/" title="Mixins vs Plugins" >}} {{< card link="intro-plugins/" title="Plugins" >}} diff --git a/docs/content/docs/introduction/concepts-and-components/intro-invocation-images.md b/docs/content/docs/introduction/concepts-and-components/intro-bundle-images.md similarity index 89% rename from docs/content/docs/introduction/concepts-and-components/intro-invocation-images.md rename to docs/content/docs/introduction/concepts-and-components/intro-bundle-images.md index cc9b087a7..bb6c4c980 100644 --- a/docs/content/docs/introduction/concepts-and-components/intro-invocation-images.md +++ b/docs/content/docs/introduction/concepts-and-components/intro-bundle-images.md @@ -1,14 +1,16 @@ --- -title: Invocation Images -descriptions: How does Porter build an Invocation Image? +title: Bundle Images +descriptions: How does Porter build an Bundle Image? weight: 6 +aliases: + - /docs/introduction/concepts-and-components/intro-invocation-images/ --- -When you build a Cloud Native Application Bundle (CNAB) with Porter, a bundle.json and an invocation image are created for you. How does Porter turn your _porter.yaml_ into an invocation image? This walkthrough will explain how Porter constructs the invocation image, including how mixins and other bundles allow you to compose functionality. +When you build a Cloud Native Application Bundle (CNAB) with Porter, a bundle.json and an bundle image are created for you. How does Porter turn your _porter.yaml_ into an bundle image? This walkthrough will explain how Porter constructs the bundle image, including how mixins and other bundles allow you to compose functionality. ## Starting From Scratch -When you create a new bundle with Porter, your project is bootstrapped with a sample porter.yaml. This scaffolding provides almost everything you need to generate your CNAB, including the invocation image. Let's use this to explain how the invocation image is built. +When you create a new bundle with Porter, your project is bootstrapped with a sample porter.yaml. This scaffolding provides almost everything you need to generate your CNAB, including the bundle image. Let's use this to explain how the bundle image is built. To create a new CNAB with Porter, you first run `porter create`. The generated porter.yaml will look like this: @@ -45,7 +47,7 @@ uninstall: After the scaffolding is created, you may edit the porter.yaml and modify the `registry: localhost:5000` element representing the Docker registry that you can push to. Note that the bundle is not pushed during porter build. -Once you have modified the porter.yaml, you can run `porter build --debug` to generate your first invocation image. +Once you have modified the porter.yaml, you can run `porter build --debug` to generate your first bundle image. ```console $ porter build --debug @@ -114,7 +116,7 @@ COPY porter.yaml ${BUNDLE_DIR}/porter.yaml WORKDIR ${BUNDLE_DIR} CMD ["/cnab/app/run"] -Starting Invocation Image Build =======> +Starting Bundle Image Build =======> Step 1/9 : FROM --platform=linux/amd64 debian:stable-slim ---> 5738956efb6b Step 2/9 : ARG BUNDLE_DIR @@ -203,7 +205,7 @@ Copying mixin exec ===> First, Porter copies its runtime plus any mixins into the `.cnab/app` directory of your bundle. -Porter locates available mixins in the $PORTER_HOME/mixins directory. By default, the Porter home directory is located in ~/.porter. In this example, we are using the exec mixin, so the $PORTER_HOME/mixins/exec directory will be copied into the invocation image. When a mixin is installed, it contains binaries for multiple operating systems. The correct binary will be copied into the bundle's .cnab directory for use in the invocation image. +Porter locates available mixins in the $PORTER_HOME/mixins directory. By default, the Porter home directory is located in ~/.porter. In this example, we are using the exec mixin, so the $PORTER_HOME/mixins/exec directory will be copied into the bundle image. When a mixin is installed, it contains binaries for multiple operating systems. The correct binary will be copied into the bundle's .cnab directory for use in the bundle image. After copying any mixins to the .cnab directory, a Dockerfile is generated: @@ -230,7 +232,7 @@ Porter starts the [Dockerfile](/docs/bundle/custom-dockerfile/) by using a base Once this is completed, the image is built: ```console -Starting Invocation Image Build =======> +Starting Bundle Image Build =======> Step 1/9 : FROM --platform=linux/amd64 debian:stable-slim ---> 5c43e435cc11 Step 2/9 : ARG BUNDLE_DIR @@ -360,7 +362,7 @@ Usage: helm [command] Available Commands: - build Generate Dockerfile lines for the bundle invocation image + build Generate Dockerfile lines for the bundle image help Help about any command install Execute the install functionality of this mixin invoke Execute the invoke functionality of this mixin @@ -378,4 +380,4 @@ Use "helm [command] --help" for more information about a command. Porter mixins must provide a build command that generates Dockerfile lines to support the runtime execution of the mixin. In the case of the helm mixin, this includes installing Helm and running a `helm init --client-only` to prepare the image. At build time, Porter uses the porter.yaml to determine what mixins are required for the bundle. Then Porter invokes the build sub-command for each specified mixin and appends that output to the base Dockerfile. -In the end, the result is a single invocation image with the necessary pieces: the porter-runtime, selected mixins and any relevant configuration files, scripts, charts or manifests. That invocation image can then be executed by any tool that supports the CNAB spec, while still taking advantage of the Porter capabilities. +In the end, the result is a single bundle image with the necessary pieces: the porter-runtime, selected mixins and any relevant configuration files, scripts, charts or manifests. That bundle image can then be executed by any tool that supports the CNAB spec, while still taking advantage of the Porter capabilities. diff --git a/docs/content/docs/introduction/concepts-and-components/intro-configuration.md b/docs/content/docs/introduction/concepts-and-components/intro-configuration.md index d75f4f9f3..49be90cfd 100644 --- a/docs/content/docs/introduction/concepts-and-components/intro-configuration.md +++ b/docs/content/docs/introduction/concepts-and-components/intro-configuration.md @@ -279,7 +279,7 @@ When it is completed, it is used to activate the features from [PEP003 - Advance ### Full control Dockerfile The `full-control-dockerfile` experimental flag disables all Dockerfile generation when building bundles. -When enabled Porter will use the file referenced by `dockerfile` in the Porter manifest when building the invocation image *without modifying* it in any way. +When enabled Porter will use the file referenced by `dockerfile` in the Porter manifest when building the bundle image *without modifying* it in any way. Ie. Porter will not process `# PORTER_x` placeholders, nor inject any user configuration and `CMD` statements. It is up to the bundle author to ensure that the contents of the Dockerfile contains the necessary tools for any mixins to function and a layout that can be executed as a Porter bundle. diff --git a/docs/content/docs/introduction/concepts-and-components/mixins-vs-plugins.md b/docs/content/docs/introduction/concepts-and-components/mixins-vs-plugins.md index 65071b625..8c31155a5 100644 --- a/docs/content/docs/introduction/concepts-and-components/mixins-vs-plugins.md +++ b/docs/content/docs/introduction/concepts-and-components/mixins-vs-plugins.md @@ -10,9 +10,9 @@ aliases: understand both Porter and CNAB, so you don't have to, and ideally have built-in logic to make your bundles easier to author and more robust. They are involved when the bundle is built, assisting with generating the Dockerfile for the -invocation image. Most importantly they are responsible for handling the actions +bundle image. Most importantly they are responsible for handling the actions in your porter.yaml when your bundle is run. For example, the helm mixin -installs the helm CLI into the invocation image, and then uses it to execute any +installs the helm CLI into the bundle image, and then uses it to execute any helm actions defined in the bundle. I like to think of mixins as paint colors on your paint palette 🎨 that you use diff --git a/docs/content/docs/operations/examine-bundles.md b/docs/content/docs/operations/examine-bundles.md index 879274156..448ab8313 100644 --- a/docs/content/docs/operations/examine-bundles.md +++ b/docs/content/docs/operations/examine-bundles.md @@ -39,4 +39,4 @@ The `porter explain` command will show what credentials and parameters are requi `porter explain` can be used with a published bundle, as show above, or with a local bundle. The command even works with bundles that were not built with Porter, through the use of the `--cnab-file` flag. For all the options, run the command `porter explain --help`. -If you would like to see the invocation images and/or the images the bundle will use, see the [inspect](/cli/porter_bundles_inspect//) command. +If you would like to see the bundle images and/or the images the bundle will use, see the [inspect](/cli/porter_bundles_inspect//) command. diff --git a/docs/content/docs/operations/signing-bundles.md b/docs/content/docs/operations/signing-bundles.md index 76931d4d9..858c3a8d9 100644 --- a/docs/content/docs/operations/signing-bundles.md +++ b/docs/content/docs/operations/signing-bundles.md @@ -8,7 +8,7 @@ weight: 7 Signing is supported from v1.1.0 {{< /callout >}} -Porter has built-in support for signing bundles and the associated invocation image using [Cosign] or [Notation]. +Porter has built-in support for signing bundles and the associated bundle image using [Cosign] or [Notation]. Learn how to configure Porter to sign bundles. - [Cosign](#cosign) @@ -33,7 +33,7 @@ Instructions on for the install Cosign can be found on the [Cosign Installation ### Configuration -Porter have to be configure to use [Cosign] to sign bundles and invocation images. All configuration is done through the [Porter config file](/docs/configuration/configuration/). To configure [Cosign] add the following to the configuration file. +Porter have to be configure to use [Cosign] to sign bundles and bundle images. All configuration is done through the [Porter config file](/docs/configuration/configuration/). To configure [Cosign] add the following to the configuration file. ```yaml # ~/.porter/config.yaml @@ -74,7 +74,7 @@ Instructions on for the install Notation can be found on the [Notation Installat ### Configuration -Porter has to be configured to use [Notation] to sign bundles and invocation images. All configuration is done through the [Porter config file](/docs/configuration/configuration/). To configure [Notation] add the following to the configuration file. +Porter has to be configured to use [Notation] to sign bundles and bundle images. All configuration is done through the [Porter config file](/docs/configuration/configuration/). To configure [Notation] add the following to the configuration file. ```yaml # ~/.porter/config.yaml diff --git a/docs/content/docs/references/cli/archive.md b/docs/content/docs/references/cli/archive.md index 2508a4914..c47a076f4 100644 --- a/docs/content/docs/references/cli/archive.md +++ b/docs/content/docs/references/cli/archive.md @@ -9,7 +9,7 @@ Archive a bundle from a reference ### Synopsis -Archives a bundle by generating a gzipped tar archive containing the bundle, invocation image and any referenced images. +Archives a bundle by generating a gzipped tar archive containing the bundle, bundle image and any referenced images. ``` porter archive FILENAME --reference PUBLISHED_BUNDLE [flags] diff --git a/docs/content/docs/references/cli/build.md b/docs/content/docs/references/cli/build.md index 6ecdc8937..2a1e51afb 100644 --- a/docs/content/docs/references/cli/build.md +++ b/docs/content/docs/references/cli/build.md @@ -9,7 +9,7 @@ Build a bundle ### Synopsis -Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the invocation image. +Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the bundle image. The docker driver builds the bundle image using the local Docker host. To use a remote Docker host, set the following environment variables: DOCKER_HOST (required) @@ -44,7 +44,7 @@ porter build [flags] -h, --help help for build --insecure-registry Don't require TLS when pulling referenced images --name string Override the bundle name - --no-cache Do not use the Docker cache when building the bundle's invocation image. + --no-cache Do not use the Docker cache when building the bundle image. --no-lint Do not run the linter --secret stringArray Secret file to expose to the build (format: id=mysecret,src=/local/secret). Custom values are accessible as build arguments in the template Dockerfile and in the manifest using template variables. May be specified multiple times. --ssh stringArray SSH agent socket or keys to expose to the build (format: default|[=|[,]]). May be specified multiple times. diff --git a/docs/content/docs/references/cli/bundles_archive.md b/docs/content/docs/references/cli/bundles_archive.md index 485b998ab..a7ef662a7 100644 --- a/docs/content/docs/references/cli/bundles_archive.md +++ b/docs/content/docs/references/cli/bundles_archive.md @@ -9,7 +9,7 @@ Archive a bundle from a reference ### Synopsis -Archives a bundle by generating a gzipped tar archive containing the bundle, invocation image and any referenced images. +Archives a bundle by generating a gzipped tar archive containing the bundle, bundle image and any referenced images. ``` porter bundles archive FILENAME --reference PUBLISHED_BUNDLE [flags] diff --git a/docs/content/docs/references/cli/bundles_build.md b/docs/content/docs/references/cli/bundles_build.md index 19c81010d..f9ca1fffd 100644 --- a/docs/content/docs/references/cli/bundles_build.md +++ b/docs/content/docs/references/cli/bundles_build.md @@ -9,7 +9,7 @@ Build a bundle ### Synopsis -Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the invocation image. +Builds the bundle in the current directory by generating a Dockerfile and a CNAB bundle.json, and then building the bundle image. The docker driver builds the bundle image using the local Docker host. To use a remote Docker host, set the following environment variables: DOCKER_HOST (required) @@ -44,7 +44,7 @@ porter bundles build [flags] -h, --help help for build --insecure-registry Don't require TLS when pulling referenced images --name string Override the bundle name - --no-cache Do not use the Docker cache when building the bundle's invocation image. + --no-cache Do not use the Docker cache when building the bundle image. --no-lint Do not run the linter --secret stringArray Secret file to expose to the build (format: id=mysecret,src=/local/secret). Custom values are accessible as build arguments in the template Dockerfile and in the manifest using template variables. May be specified multiple times. --ssh stringArray SSH agent socket or keys to expose to the build (format: default|[=|[,]]). May be specified multiple times. diff --git a/docs/content/docs/references/cli/bundles_inspect.md b/docs/content/docs/references/cli/bundles_inspect.md index 11a72098b..91a17c2f7 100644 --- a/docs/content/docs/references/cli/bundles_inspect.md +++ b/docs/content/docs/references/cli/bundles_inspect.md @@ -9,7 +9,7 @@ Inspect a bundle ### Synopsis -Inspect a bundle by printing the invocation images and any related images images. +Inspect a bundle by printing the bundle images and any related images images. If you would like more information about the bundle, the porter explain command will provide additional information, like parameters, credentials, outputs and custom actions available. diff --git a/docs/content/docs/references/cli/inspect.md b/docs/content/docs/references/cli/inspect.md index e422ee1d7..7a5a007c2 100644 --- a/docs/content/docs/references/cli/inspect.md +++ b/docs/content/docs/references/cli/inspect.md @@ -9,7 +9,7 @@ Inspect a bundle ### Synopsis -Inspect a bundle by printing the invocation images and any related images images. +Inspect a bundle by printing the bundle images and any related images images. If you would like more information about the bundle, the porter explain command will provide additional information, like parameters, credentials, outputs and custom actions available. diff --git a/docs/content/docs/references/cli/install.md b/docs/content/docs/references/cli/install.md index 527cf9247..0e9b5925a 100644 --- a/docs/content/docs/references/cli/install.md +++ b/docs/content/docs/references/cli/install.md @@ -15,7 +15,7 @@ The first argument is the name of the installation to create. This defaults to t Once a bundle has been successfully installed, the install action cannot be repeated. This is a precaution to avoid accidentally overwriting an existing installation. If you need to re-run install, which is common when authoring a bundle, you can use the --force flag to by-pass this check. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/installations_install.md b/docs/content/docs/references/cli/installations_install.md index 4865cbd72..905e28dc5 100644 --- a/docs/content/docs/references/cli/installations_install.md +++ b/docs/content/docs/references/cli/installations_install.md @@ -15,7 +15,7 @@ The first argument is the name of the installation to create. This defaults to t Once a bundle has been successfully installed, the install action cannot be repeated. This is a precaution to avoid accidentally overwriting an existing installation. If you need to re-run install, which is common when authoring a bundle, you can use the --force flag to by-pass this check. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/installations_invoke.md b/docs/content/docs/references/cli/installations_invoke.md index 5dcfb201c..8239e67c3 100644 --- a/docs/content/docs/references/cli/installations_invoke.md +++ b/docs/content/docs/references/cli/installations_invoke.md @@ -13,7 +13,7 @@ Invoke a custom action on an installation. The first argument is the installation name upon which to invoke the action. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/installations_uninstall.md b/docs/content/docs/references/cli/installations_uninstall.md index 7b6436d21..8dfc8da43 100644 --- a/docs/content/docs/references/cli/installations_uninstall.md +++ b/docs/content/docs/references/cli/installations_uninstall.md @@ -13,7 +13,7 @@ Uninstall an installation The first argument is the installation name to uninstall. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/installations_upgrade.md b/docs/content/docs/references/cli/installations_upgrade.md index 68ba02a66..3ffe83f57 100644 --- a/docs/content/docs/references/cli/installations_upgrade.md +++ b/docs/content/docs/references/cli/installations_upgrade.md @@ -13,7 +13,7 @@ Upgrade an installation. The first argument is the installation name to upgrade. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/invoke.md b/docs/content/docs/references/cli/invoke.md index 40be721ac..d51862146 100644 --- a/docs/content/docs/references/cli/invoke.md +++ b/docs/content/docs/references/cli/invoke.md @@ -13,7 +13,7 @@ Invoke a custom action on an installation. The first argument is the installation name upon which to invoke the action. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/publish.md b/docs/content/docs/references/cli/publish.md index 4fc8b14d5..9a6b44d18 100644 --- a/docs/content/docs/references/cli/publish.md +++ b/docs/content/docs/references/cli/publish.md @@ -9,9 +9,9 @@ Publish a bundle ### Synopsis -Publishes a bundle by pushing the invocation image and bundle to a registry. +Publishes a bundle by pushing the bundle image and bundle to a registry. -Note: if overrides for registry/tag/reference are provided, this command only re-tags the invocation image and bundle; it does not re-build the bundle. +Note: if overrides for registry/tag/reference are provided, this command only re-tags the bundle image and bundle; it does not re-build the bundle. ``` porter publish [flags] diff --git a/docs/content/docs/references/cli/uninstall.md b/docs/content/docs/references/cli/uninstall.md index e1487b365..cfd51ddb6 100644 --- a/docs/content/docs/references/cli/uninstall.md +++ b/docs/content/docs/references/cli/uninstall.md @@ -13,7 +13,7 @@ Uninstall an installation The first argument is the installation name to uninstall. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d'' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/references/cli/upgrade.md b/docs/content/docs/references/cli/upgrade.md index da097b4ea..1ee4cc7a3 100644 --- a/docs/content/docs/references/cli/upgrade.md +++ b/docs/content/docs/references/cli/upgrade.md @@ -13,7 +13,7 @@ Upgrade an installation. The first argument is the installation name to upgrade. This defaults to the name of the bundle. -Porter uses the docker driver as the default runtime for executing a bundle's invocation image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. +Porter uses the docker driver as the default runtime for executing a bundle image, but an alternate driver may be supplied via '--driver/-d' or the PORTER_RUNTIME_DRIVER environment variable. For example, the 'debug' driver may be specified, which simply logs the info given to it and then exits. The docker driver runs the bundle container using the local Docker host. To use a remote Docker host, set the following environment variables: diff --git a/docs/content/docs/troubleshooting/_index.md b/docs/content/docs/troubleshooting/_index.md index b070d3cfe..0d80b7881 100644 --- a/docs/content/docs/troubleshooting/_index.md +++ b/docs/content/docs/troubleshooting/_index.md @@ -97,8 +97,8 @@ Porter assumes a debian-based base image that has apt available. Many of the mix and the binary that they shim. ``` -Starting Invocation Image Build =======> -Error: unable to build CNAB invocation image: failed to stream docker build output: The command '/bin/sh -c apt-get update && apt-get install -y apt-transport-https curl && curl -o kubectl https://storage.googleapis.com/kubernetes-release/release/v1.15.5/bin/linux/amd64/kubectl && mv kubectl /usr/local/bin && chmod a+x /usr/local/bin/kubectl' returned a non-zero code: 127 +Starting Bundle Image Build =======> +Error: unable to build CNAB bundle image: failed to stream docker build output: The command '/bin/sh -c apt-get update && apt-get install -y apt-transport-https curl && curl -o kubectl https://storage.googleapis.com/kubernetes-release/release/v1.15.5/bin/linux/amd64/kubectl && mv kubectl /usr/local/bin && chmod a+x /usr/local/bin/kubectl' returned a non-zero code: 127 ``` For now you must base your custom Dockerfile on debian or ubuntu. diff --git a/docs/content/mixin-dev-guide/commands.md b/docs/content/mixin-dev-guide/commands.md index 2543a2611..280a37b17 100644 --- a/docs/content/mixin-dev-guide/commands.md +++ b/docs/content/mixin-dev-guide/commands.md @@ -209,7 +209,7 @@ the action, e.g. "install", and a definition named `Step`, e.g. ## install -The install command (required) is called from inside the invocation image during +The install command (required) is called from inside the bundle image during the `porter run` command. The current step from the manifest is passed on stdin. The mixin should write any output values to their own files in the `/cnab/app/porter/outputs/` directory. @@ -243,7 +243,7 @@ alsotopsecret ## upgrade -The upgrade command (required) is called from inside the invocation image during +The upgrade command (required) is called from inside the bundle image during the `porter run` command. The current step from the manifest is passed on stdin. The mixin should write any output values to their own files in the `/cnab/app/porter/outputs/` directory. @@ -276,7 +276,7 @@ updatedtopsecret ## uninstall -The uninstall command (required) is called from inside the invocation image during +The uninstall command (required) is called from inside the bundle image during the `porter run` command. The current step from the manifest is passed on stdin. Example: @@ -293,7 +293,7 @@ uninstall: ## invoke -The invoke command (optional) is called from inside the invocation image during +The invoke command (optional) is called from inside the bundle image during the `porter run` command when a custom action defined in the bundle is executed. The current step from the manifest is passed on stdin. The mixin should write any output values to their own files in the `/cnab/app/porter/outputs/` directory. diff --git a/docs/content/wiring.md b/docs/content/wiring.md index 62f7ac65a..dcb8bcbd4 100644 --- a/docs/content/wiring.md +++ b/docs/content/wiring.md @@ -145,7 +145,7 @@ See [Parameters][parameters] to learn how parameters are passed in to Porter pri ## Credentials -Credentials are defined in the `porter.yaml` with a YAML block of one more credential definitions. You can declare that a credential should be placed in a path within the invocation image or into an environment variable. +Credentials are defined in the `porter.yaml` with a YAML block of one more credential definitions. You can declare that a credential should be placed in a path within the bundle image or into an environment variable. To declare a file injection: diff --git a/pkg/build/build.go b/pkg/build/build.go index c9f9a419d..7e2829faf 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -43,11 +43,11 @@ var ( ) type Builder interface { - // BuildInvocationImage using the bundle in the build context directory - BuildInvocationImage(ctx context.Context, manifest *manifest.Manifest, opts BuildImageOptions) error + // BuildBundleImage using the bundle in the build context directory + BuildBundleImage(ctx context.Context, manifest *manifest.Manifest, opts BuildImageOptions) error - // TagInvocationImage using the origTag and newTag values supplied - TagInvocationImage(ctx context.Context, origTag, newTag string) error + // TagBundleImage using the origTag and newTag values supplied + TagBundleImage(ctx context.Context, origTag, newTag string) error } // BuildImageOptions represents some flags exposed by docker. diff --git a/pkg/build/buildkit/buildx.go b/pkg/build/buildkit/buildx.go index c681b502b..f9d22adb0 100644 --- a/pkg/build/buildkit/buildx.go +++ b/pkg/build/buildkit/buildx.go @@ -65,11 +65,11 @@ func (l unstructuredLogger) Write(p []byte) (n int, err error) { return len(p), nil } -func (b *Builder) BuildInvocationImage(ctx context.Context, manifest *manifest.Manifest, opts build.BuildImageOptions) error { +func (b *Builder) BuildBundleImage(ctx context.Context, manifest *manifest.Manifest, opts build.BuildImageOptions) error { ctx, span := tracing.StartSpan(ctx, attribute.String("image", manifest.Image)) defer span.EndSpan() - span.Info("Building invocation image") + span.Info("Building bundle image") cli, err := docker.GetDockerClient() if err != nil { @@ -186,7 +186,7 @@ func (b *Builder) determineBuildArgs( return nil, span.Errorf("Error parsing custom build arguments from the Dockerfile at %s: %w", dockerfilePath, err) } - // Pass custom values as build args when building the invocation image + // Pass custom values as build args when building the bundle image argNameRegex := regexp.MustCompile(`[^A-Z0-9_]`) for k, v := range convertedCustomInput { // Make all arg names upper-case @@ -243,7 +243,7 @@ func parseBuildArgs(unparsed []string, parsed map[string]string) { } } -func (b *Builder) TagInvocationImage(ctx context.Context, origTag, newTag string) error { +func (b *Builder) TagBundleImage(ctx context.Context, origTag, newTag string) error { ctx, log := tracing.StartSpan(ctx, attribute.String("source-tag", origTag), attribute.String("destination-tag", newTag)) defer log.EndSpan() diff --git a/pkg/cnab/cnab-to-oci/registry.go b/pkg/cnab/cnab-to-oci/registry.go index e88063d88..7ce5831a2 100644 --- a/pkg/cnab/cnab-to-oci/registry.go +++ b/pkg/cnab/cnab-to-oci/registry.go @@ -35,7 +35,7 @@ type ErrNoContentDigest error // NewErrNoContentDigest returns an ErrNoContentDigest formatted with the // provided image name func NewErrNoContentDigest(image string) ErrNoContentDigest { - return fmt.Errorf("unable to verify that the pulled image %s is the invocation image referenced by the bundle because the bundle does not specify a content digest. This could allow for the invocation image to be replaced or tampered with", image) + return fmt.Errorf("unable to verify that the pulled image %s is the bundle image referenced by the bundle because the bundle does not specify a content digest. This could allow for the bundle image to be replaced or tampered with", image) } var _ RegistryProvider = &Registry{} diff --git a/pkg/cnab/extended_bundle.go b/pkg/cnab/extended_bundle.go index c9bd2294d..73e1e9c62 100644 --- a/pkg/cnab/extended_bundle.go +++ b/pkg/cnab/extended_bundle.go @@ -198,7 +198,7 @@ func WriteParameterToString(paramName string, value interface{}) (string, error) } // GetReferencedRegistries identifies all OCI registries used by the bundle -// from both the invocation image and the referenced images. +// from both the bundle image and the referenced images. func (b ExtendedBundle) GetReferencedRegistries() ([]string, error) { regMap := make(map[string]struct{}) for _, ii := range b.InvocationImages { diff --git a/pkg/cnab/extended_bundle_test.go b/pkg/cnab/extended_bundle_test.go index 820316236..debe5d5a7 100644 --- a/pkg/cnab/extended_bundle_test.go +++ b/pkg/cnab/extended_bundle_test.go @@ -167,8 +167,8 @@ func TestExtendedBundle_IsSensitiveParameter(t *testing.T) { } func TestExtendedBundle_GetReferencedRegistries(t *testing.T) { - t.Run("invocation image in different registry", func(t *testing.T) { - // Make sure we are looking at the images and the invocation image + t.Run("bundle image in different registry", func(t *testing.T) { + // Make sure we are looking at the images and the bundle image b := NewBundle(bundle.Bundle{ InvocationImages: []bundle.InvocationImage{ {BaseImage: bundle.BaseImage{Image: "docker.io/example/mybuns:abc123"}}, @@ -186,7 +186,7 @@ func TestExtendedBundle_GetReferencedRegistries(t *testing.T) { require.Equal(t, wantRegs, regs, "unexpected registries identified in the bundle") }) - t.Run("invocation image in same registry", func(t *testing.T) { + t.Run("bundle image in same registry", func(t *testing.T) { // Make sure that we don't generate duplicate registry entries b := NewBundle(bundle.Bundle{ InvocationImages: []bundle.InvocationImage{ diff --git a/pkg/cnab/provider/action.go b/pkg/cnab/provider/action.go index ccbc43ae6..5124ab065 100644 --- a/pkg/cnab/provider/action.go +++ b/pkg/cnab/provider/action.go @@ -51,7 +51,7 @@ type ActionArguments struct { // MountHostVolumes is a map of host paths to container paths to mount. HostVolumeMounts []HostVolumeMountSpec - // PersistLogs specifies if the invocation image output should be saved as an output. + // PersistLogs specifies if the bundle image output should be saved as an output. PersistLogs bool } @@ -127,10 +127,10 @@ func (r *Runtime) AddRelocation(args ActionArguments) cnabaction.OperationConfig op.Files["/cnab/app/relocation-mapping.json"] = string(b) - // If the invocation image is present in the relocation mapping, we need + // If the bundle image is present in the relocation mapping, we need // to update the operation and set the new image reference. Unfortunately, // the relocation mapping is just reference => reference, so there isn't a - // great way to check for the invocation image. + // great way to check for the bundle image. if mappedInvo, ok := args.BundleReference.RelocationMap[op.Image.Image]; ok { op.Image.Image = mappedInvo } diff --git a/pkg/config/config.go b/pkg/config/config.go index b0914adeb..58d878ac0 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -44,15 +44,15 @@ const ( // during the execution of a bundle action. BundleOutputsDir = "/cnab/app/outputs" - // ClaimFilepath is the filepath to the claim.json inside of an invocation image + // ClaimFilepath is the filepath to the claim.json inside of an bundle image ClaimFilepath = "/cnab/claim.json" // EnvPorterInstallationNamespace is the name of the environment variable which is injected into the - // invocation image, containing the namespace of the installation. + // bundle image, containing the namespace of the installation. EnvPorterInstallationNamespace = "PORTER_INSTALLATION_NAMESPACE" // EnvPorterInstallationName is the name of the environment variable which is injected into the - // invocation image, containing the name of the installation. + // bundle image, containing the name of the installation. EnvPorterInstallationName = "PORTER_INSTALLATION_NAME" // DefaultVerbosity is the default value for the --verbosity flag. diff --git a/pkg/config/datastore.go b/pkg/config/datastore.go index 3f0e23e6a..874744570 100644 --- a/pkg/config/datastore.go +++ b/pkg/config/datastore.go @@ -8,10 +8,10 @@ const ( // the build driver. BuildDriverBuildkit = "buildkit" - // RuntimeDriverDocker specifies that the invocation image should be executed on docker. + // RuntimeDriverDocker specifies that the bundle image should be executed on docker. RuntimeDriverDocker = "docker" - // RuntimeDriverKubernetes specifies that the invocation image should be executed on kubernetes. + // RuntimeDriverKubernetes specifies that the bundle image should be executed on kubernetes. RuntimeDriverKubernetes = "kubernetes" ) diff --git a/pkg/experimental/experimental.go b/pkg/experimental/experimental.go index ff0809306..04aa17dea 100644 --- a/pkg/experimental/experimental.go +++ b/pkg/experimental/experimental.go @@ -7,7 +7,7 @@ const ( // DependenciesV2 is the name of the experimental feature flag for PEP003 - Advanced Dependencies. DependenciesV2 = "dependencies-v2" - // FullControlDockerfile is the name of the experimental feature flag giving authors full control of the invocation image Dockerfile + // FullControlDockerfile is the name of the experimental feature flag giving authors full control of the bundle image Dockerfile FullControlDockerfile = "full-control-dockerfile" ) @@ -21,7 +21,7 @@ const ( // FlagDependenciesV2 gates the changes from PEP003 - Advanced Dependencies. FlagDependenciesV2 - // FlagFullControlDockerfile gates the changes required for giving authors full control of the invocation image Dockerfile + // FlagFullControlDockerfile gates the changes required for giving authors full control of the bundle image Dockerfile FlagFullControlDockerfile ) diff --git a/pkg/manifest/manifest.go b/pkg/manifest/manifest.go index be1192f60..5c9b63c7a 100644 --- a/pkg/manifest/manifest.go +++ b/pkg/manifest/manifest.go @@ -82,16 +82,16 @@ type Manifest struct { // in the format REGISTRY/NAME or REGISTRY/NAME:TAG Reference string `yaml:"reference,omitempty"` - // DockerTag is the Docker tag portion of the published invocation + // DockerTag is the Docker tag portion of the published bundle // image and bundle. It will only be set at time of publishing. DockerTag string `yaml:"-"` - // Image is the name of the invocation image in the format REGISTRY/NAME:TAG + // Image is the name of the bundle image in the format REGISTRY/NAME:TAG // It doesn't map to any field in the manifest as it has been deprecated // and isn't meant to be user-specified Image string `yaml:"-"` - // Dockerfile is the relative path to the Dockerfile template for the invocation image + // Dockerfile is the relative path to the Dockerfile template for the bundle image Dockerfile string `yaml:"dockerfile,omitempty"` Mixins []MixinDeclaration `yaml:"mixins,omitempty"` @@ -1169,13 +1169,13 @@ func UnmarshalManifest(cxt *portercontext.Context, manifestData []byte) (*Manife // SetDefaults updates the manifest with default values where not populated func (m *Manifest) SetDefaults() error { - return m.SetInvocationImageAndReference("") + return m.SetBundleImageAndReference("") } -// SetInvocationImageAndReference sets the invocation image name and the +// SetBundleImageAndReference sets the bundle image name and the // bundle reference on the manifest per the provided reference or via the // registry or name values on the manifest. -func (m *Manifest) SetInvocationImageAndReference(ref string) error { +func (m *Manifest) SetBundleImageAndReference(ref string) error { if ref != "" { m.Reference = ref } diff --git a/pkg/porter/archive.go b/pkg/porter/archive.go index cc2889278..f82f48e02 100644 --- a/pkg/porter/archive.go +++ b/pkg/porter/archive.go @@ -83,7 +83,7 @@ func (o *ArchiveOptions) Validate(ctx context.Context, args []string, p *Porter) return o.BundleReferenceOptions.Validate(ctx, args, p) } -// Archive is a composite function that generates a CNAB thick bundle. It will pull the invocation image, and +// Archive is a composite function that generates a CNAB thick bundle. It will pull the bundle image, and // any referenced images locally (if needed), export them to individual layers, generate a bundle.json and // then generate a gzipped tar archive containing the bundle.json and the images func (p *Porter) Archive(ctx context.Context, opts ArchiveOptions) error { diff --git a/pkg/porter/build.go b/pkg/porter/build.go index 47e3b97da..0902df00b 100644 --- a/pkg/porter/build.go +++ b/pkg/porter/build.go @@ -29,7 +29,7 @@ type BuildOptions struct { // NoLint indicates if lint should be run before build. NoLint bool - // Driver to use when building the invocation image. + // Driver to use when building the bundle image. Driver string // Custom is the unparsed list of NAME=VALUE custom inputs set on the command line. @@ -138,8 +138,8 @@ func (p *Porter) Build(ctx context.Context, opts BuildOptions) error { } // Build bundle so that resulting bundle.json is available for inclusion - // into the invocation image. - // Note: the content digest field on the invocation image section of the + // into the bundle image. + // Note: the content digest field on the bundle image section of the // bundle.json will *not* be correct until the image is actually pushed // to a registry. The bundle.json will need to be updated after publishing // and provided just-in-time during bundle execution. @@ -158,9 +158,9 @@ func (p *Porter) Build(ctx context.Context, opts BuildOptions) error { builder := p.GetBuilder(ctx) - err = builder.BuildInvocationImage(ctx, m, opts.BuildImageOptions) + err = builder.BuildBundleImage(ctx, m, opts.BuildImageOptions) if err != nil { - return span.Error(fmt.Errorf("unable to build CNAB invocation image: %w", err)) + return span.Error(fmt.Errorf("unable to build bundle image: %w", err)) } return nil diff --git a/pkg/porter/helpers.go b/pkg/porter/helpers.go index 973a5f291..bf5913b8a 100644 --- a/pkg/porter/helpers.go +++ b/pkg/porter/helpers.go @@ -267,10 +267,10 @@ func NewTestBuildProvider() *TestBuildProvider { return &TestBuildProvider{} } -func (t *TestBuildProvider) BuildInvocationImage(ctx context.Context, manifest *manifest.Manifest, opts build.BuildImageOptions) error { +func (t *TestBuildProvider) BuildBundleImage(ctx context.Context, manifest *manifest.Manifest, opts build.BuildImageOptions) error { return nil } -func (t *TestBuildProvider) TagInvocationImage(ctx context.Context, origTag, newTag string) error { +func (t *TestBuildProvider) TagBundleImage(ctx context.Context, origTag, newTag string) error { return nil } diff --git a/pkg/porter/inspect.go b/pkg/porter/inspect.go index 4c4c23da5..1ca4bd897 100644 --- a/pkg/porter/inspect.go +++ b/pkg/porter/inspect.go @@ -109,10 +109,10 @@ func (p *Porter) printBundleInspectTable(bun *InspectableBundle) error { } func (p *Porter) printInvocationImageInspectBlock(bun *InspectableBundle) error { - fmt.Fprintln(p.Out, "Invocation Images:") + fmt.Fprintln(p.Out, "Bundle Images:") err := p.printInvocationImageInspectTable(bun) if err != nil { - return fmt.Errorf("unable to print invocation images table: %w", err) + return fmt.Errorf("unable to print bundle images table: %w", err) } fmt.Fprintln(p.Out, "") // force a blank line after this block return nil diff --git a/pkg/porter/install.go b/pkg/porter/install.go index d49ef3f39..bd7c3e76c 100644 --- a/pkg/porter/install.go +++ b/pkg/porter/install.go @@ -109,12 +109,12 @@ func (p *Porter) InstallBundle(ctx context.Context, opts InstallOptions) error { } invocationImage := bun.Definition.InvocationImages[0].Image - log.Debugf("verifying invocation image signature for %s", invocationImage) + log.Debugf("verifying bundle image signature for %s", invocationImage) err = p.Signer.Verify(ctx, invocationImage) if err != nil { return log.Errorf("unable to verify signature: %w", err) } - log.Debugf("invocation image signature verified for %s", invocationImage) + log.Debugf("bundle image signature verified for %s", invocationImage) } // Run install using the updated installation record diff --git a/pkg/porter/publish.go b/pkg/porter/publish.go index 93b4c44b8..cd667c876 100644 --- a/pkg/porter/publish.go +++ b/pkg/porter/publish.go @@ -84,7 +84,7 @@ func (o *PublishOptions) validateTag() error { return nil } -// Publish is a composite function that publishes an invocation image, rewrites the porter manifest +// Publish is a composite function that publishes an bundle image, rewrites the porter manifest // and then regenerates the bundle.json. Finally, it publishes the manifest to an OCI registry. func (p *Porter) Publish(ctx context.Context, opts PublishOptions) error { ctx, log := tracing.StartSpan(ctx) @@ -112,7 +112,7 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error // If the manifest file is the default/user-supplied manifest, // hot-swap in Porter's canonical translation (if exists) from // the .cnab/app directory, as there may be dynamic overrides for - // the name and version fields to inform invocation image naming. + // the name and version fields to inform bundle image naming. canonicalManifest := filepath.Join(opts.Dir, build.LOCAL_MANIFEST) canonicalExists, err := p.FileSystem.Exists(canonicalManifest) if err != nil { @@ -136,7 +136,7 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error } } - // Capture original invocation image name as it may be updated below + // Capture original bundle image name as it may be updated below origInvImg := m.Image // Check for tag and registry overrides optionally supplied on publish @@ -153,17 +153,17 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error m.Reference = "" } - // Update invocation image and reference with opts.Reference, which may be + // Update bundle image and reference with opts.Reference, which may be // empty, which is fine - we still may need to pick up tag and/or registry // overrides - if err := m.SetInvocationImageAndReference(opts.Reference); err != nil { - return log.Errorf("unable to set invocation image name and reference: %w", err) + if err := m.SetBundleImageAndReference(opts.Reference); err != nil { + return log.Errorf("unable to set bundle image name and reference: %w", err) } if origInvImg != m.Image { // Tag it so that it will be known/found by Docker for publishing builder := p.GetBuilder(ctx) - if err := builder.TagInvocationImage(ctx, origInvImg, m.Image); err != nil { + if err := builder.TagBundleImage(ctx, origInvImg, m.Image); err != nil { return err } } @@ -203,10 +203,10 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error bundleRef.Digest, err = p.Registry.PushImage(ctx, imgRef, regOpts) if err != nil { - return log.Errorf("unable to push CNAB invocation image %q: %w", m.Image, err) + return log.Errorf("unable to push bundle image %q: %w", m.Image, err) } - bundleRef.Definition, err = p.rewriteBundleWithInvocationImageDigest(ctx, m, bundleRef.Digest) + bundleRef.Definition, err = p.rewriteBundleWithBundleImageDigest(ctx, m, bundleRef.Digest) if err != nil { return err } @@ -222,10 +222,10 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error if err != nil { return log.Errorf("error calculation temporary image tag: %w", err) } - log.Debugf("Signing invocation image %s.", inImage.String()) + log.Debugf("Signing bundle image %s.", inImage.String()) err = p.Signer.Sign(context.Background(), inImage.String()) if err != nil { - return log.Errorf("error signing invocation image: %w", err) + return log.Errorf("error signing bundle image: %w", err) } log.Debugf("Signing bundle artifact %s.", bundleRef.Reference.String()) err = p.Signer.Sign(context.Background(), bundleRef.Reference.String()) @@ -242,7 +242,7 @@ func (p *Porter) publishFromFile(ctx context.Context, opts PublishOptions) error // publishFromArchive (re-)publishes a bundle, provided by the archive file, using the provided tag. // -// After the bundle is extracted from the archive, we iterate through all of the images (invocation +// After the bundle is extracted from the archive, we iterate through all of the images (bundle // and application) listed in the bundle, grab their digests by parsing the extracted // OCI Layout, rename each based on the registry/org values derived from the provided tag // and then push each updated image with the original digests @@ -418,17 +418,17 @@ func getNewImageNameFromBundleReference(origImg, bundleTag string) (image.Name, return image.NewName(newImgRef.String()) } -func (p *Porter) rewriteBundleWithInvocationImageDigest(ctx context.Context, m *manifest.Manifest, digest digest.Digest) (cnab.ExtendedBundle, error) { +func (p *Porter) rewriteBundleWithBundleImageDigest(ctx context.Context, m *manifest.Manifest, digest digest.Digest) (cnab.ExtendedBundle, error) { taggedImage, err := p.rewriteImageWithDigest(m.Image, digest.String()) if err != nil { - return cnab.ExtendedBundle{}, fmt.Errorf("unable to update invocation image reference: %w", err) + return cnab.ExtendedBundle{}, fmt.Errorf("unable to update bundle image reference: %w", err) } m.Image = taggedImage fmt.Fprintln(p.Out, "\nRewriting CNAB bundle.json...") err = p.buildBundle(ctx, m, digest) if err != nil { - return cnab.ExtendedBundle{}, fmt.Errorf("unable to rewrite CNAB bundle.json with updated invocation image digest: %w", err) + return cnab.ExtendedBundle{}, fmt.Errorf("unable to rewrite CNAB bundle.json with updated bundle image digest: %w", err) } bun, err := cnab.LoadBundle(p.Context, build.LOCAL_BUNDLE) @@ -464,13 +464,13 @@ func (p *Porter) relocateImage(relocationMap relocation.ImageRelocationMap, layo return relocationMap, nil } -func (p *Porter) rewriteImageWithDigest(InvocationImage string, imgDigest string) (string, error) { - taggedRef, err := cnab.ParseOCIReference(InvocationImage) +func (p *Porter) rewriteImageWithDigest(image string, imgDigest string) (string, error) { + taggedRef, err := cnab.ParseOCIReference(image) if err != nil { return "", fmt.Errorf("unable to parse docker image: %s", err) } - // Change the invocation image from bundlerepo:tag-hash => bundlerepo@sha256:abc123 + // Change the bundle image from bundlerepo:tag-hash => bundlerepo@sha256:abc123 // Do not continue to reference the temporary tag that we used to push, otherwise that will prevent the registry from garbage collecting it later. repo := cnab.MustParseOCIReference(taggedRef.Repository()) diff --git a/pkg/porter/publish_test.go b/pkg/porter/publish_test.go index 99b05a07a..a14d72171 100644 --- a/pkg/porter/publish_test.go +++ b/pkg/porter/publish_test.go @@ -270,7 +270,7 @@ func TestPublish_RefreshCachedBundle_OnlyWarning(t *testing.T) { } func TestPublish_RewriteImageWithDigest(t *testing.T) { - // change from our temporary tag for the invocation image to using ONLY the digest + // change from our temporary tag for the bundle image to using ONLY the digest p := NewTestPorter(t) defer p.Close() diff --git a/pkg/porter/stamp.go b/pkg/porter/stamp.go index c2b9888fe..c585ba790 100644 --- a/pkg/porter/stamp.go +++ b/pkg/porter/stamp.go @@ -95,7 +95,7 @@ func (p *Porter) IsBundleUpToDate(ctx context.Context, opts BundleDefinitionOpti return false, span.Error(err) } - // Check whether invocation images exist in host registry. + // Check whether bundle images exist in host registry. for _, invocationImage := range bun.InvocationImages { // if the invocationImage is built before using a random string tag, // we should rebuild it with the new format @@ -114,10 +114,10 @@ func (p *Porter) IsBundleUpToDate(ctx context.Context, opts BundleDefinitionOpti _, err = p.Registry.GetCachedImage(ctx, imgRef) if err != nil { if errors.Is(err, cnabtooci.ErrNotFound{}) { - span.Debugf("%s because the invocation image %s doesn't exist in the local image cache", rebuildMessagePrefix, invocationImage.Image) + span.Debugf("%s because the bundle image %s doesn't exist in the local image cache", rebuildMessagePrefix, invocationImage.Image) return false, nil } - err = fmt.Errorf("an error occurred checking the Docker cache for the invocation image: %w", err) + err = fmt.Errorf("an error occurred checking the Docker cache for the bundle image: %w", err) span.Debugf("%s: %w", rebuildMessagePrefix, err) return false, span.Error(err) } diff --git a/pkg/porter/testdata/schema.json b/pkg/porter/testdata/schema.json index 822a0d800..f52c06fd6 100644 --- a/pkg/porter/testdata/schema.json +++ b/pkg/porter/testdata/schema.json @@ -40,7 +40,7 @@ "type": "object" }, "credential": { - "description": "Credential defines a particular credential, and where it should be placed in the invocation image", + "description": "Credential defines a particular credential, and where it should be placed in the bundle image", "properties": { "applyTo": { "$ref": "#/definitions/applyTo" @@ -58,7 +58,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where credentials will be mounted", + "description": "The path inside of the bundle image where credentials will be mounted", "type": "string" }, "required": { @@ -209,7 +209,7 @@ "type": "object" } ], - "description": "A value that is produced by running an invocation image" + "description": "A value that is produced by running an bundle image" }, "parameter": { "allOf": [ @@ -234,7 +234,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where parameter data is mounted", + "description": "The path inside of the bundle image where parameter data is mounted", "type": "string" }, "sensitive": { @@ -268,7 +268,7 @@ "type": "object" } ], - "description": "A parameter that can be passed into the invocation image" + "description": "A parameter that can be passed into the bundle image" }, "stateVar": { "description": "A state variable that is generated by the bundle and injected on subsequent runs.", @@ -286,7 +286,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where the state variable data is mounted", + "description": "The path inside of the bundle image where the state variable data is mounted", "type": "string" } }, @@ -633,7 +633,7 @@ }, "properties": { "credentials": { - "description": "Credentials to be injected into the invocation image", + "description": "Credentials to be injected into the bundle image", "items": { "$ref": "#/definitions/credential" }, @@ -724,14 +724,14 @@ "type": "string" }, "outputs": { - "description": "Values that are produced by executing the invocation image", + "description": "Values that are produced by executing the bundle image", "items": { "$ref": "#/definitions/output" }, "type": "array" }, "parameters": { - "description": "Parameters that can be injected into the invocation image", + "description": "Parameters that can be injected into the bundle image", "items": { "$ref": "#/definitions/parameter" }, diff --git a/pkg/runtime/runtime.go b/pkg/runtime/runtime.go index 4f05cb297..c79e9a494 100644 --- a/pkg/runtime/runtime.go +++ b/pkg/runtime/runtime.go @@ -59,7 +59,7 @@ func (r *PorterRuntime) Execute(ctx context.Context, rm *RuntimeManifest) error err = r.RuntimeManifest.ResolveInvocationImage(rtb, reloMap) if err != nil { - return fmt.Errorf("unable to resolve bundle invocation images: %w", err) + return fmt.Errorf("unable to resolve bundle images: %w", err) } err = r.RuntimeManifest.ResolveImages(rtb, reloMap) if err != nil { diff --git a/pkg/runtime/runtime_manifest.go b/pkg/runtime/runtime_manifest.go index cc21f9421..9cc084b1f 100644 --- a/pkg/runtime/runtime_manifest.go +++ b/pkg/runtime/runtime_manifest.go @@ -778,7 +778,7 @@ func (m *RuntimeManifest) applyUnboundBundleOutputs(ctx context.Context) error { return log.Error(bigErr.ErrorOrNil()) } -// ResolveInvocationImage updates the RuntimeManifest to properly reflect the invocation image passed to the bundle via the +// ResolveInvocationImage updates the RuntimeManifest to properly reflect the bundle image passed to the bundle via the // mounted bundle.json and relocation mapping func (m *RuntimeManifest) ResolveInvocationImage(bun cnab.ExtendedBundle, reloMap relocation.ImageRelocationMap) error { for _, image := range bun.InvocationImages { @@ -788,11 +788,11 @@ func (m *RuntimeManifest) ResolveInvocationImage(bun cnab.ExtendedBundle, reloMa ref, err := cnab.ParseOCIReference(image.Image) if err != nil { - return fmt.Errorf("unable to parse invocation image reference: %w", err) + return fmt.Errorf("unable to parse bundle image reference: %w", err) } refWithDigest, err := ref.WithDigest(digest.Digest(image.Digest)) if err != nil { - return fmt.Errorf("unable to get invocation image reference with digest: %w", err) + return fmt.Errorf("unable to get bundle image reference with digest: %w", err) } m.Image = refWithDigest.String() @@ -829,7 +829,7 @@ func (m *RuntimeManifest) ResolveImages(bun cnab.ExtendedBundle, reloMap relocat } for oldRef, reloRef := range reloMap { alias := reverseLookup[oldRef] - if manifestImage, ok := m.ImageMap[alias]; ok { //note, there might be other images in the relocation mapping, like the invocation image + if manifestImage, ok := m.ImageMap[alias]; ok { //note, there might be other images in the relocation mapping, like the bundle image err := resolveImage(&manifestImage, reloRef) if err != nil { return fmt.Errorf("unable to update image map from relocation mapping: %w", err) diff --git a/pkg/runtime/runtime_manifest_test.go b/pkg/runtime/runtime_manifest_test.go index 5c9943890..d56ad0dcf 100644 --- a/pkg/runtime/runtime_manifest_test.go +++ b/pkg/runtime/runtime_manifest_test.go @@ -1238,7 +1238,7 @@ func TestResolveInvocationImage(t *testing.T) { }, {name: "failure with invalid digest", bundleInvocationImg: bundle.BaseImage{Image: "blah/ghost:latest", ImageType: "docker", Digest: "123"}, - wantErr: "unable to get invocation image reference with digest", + wantErr: "unable to get bundle image reference with digest", }, } diff --git a/pkg/schema/manifest.schema.json b/pkg/schema/manifest.schema.json index ed3c5100c..6dfed59aa 100644 --- a/pkg/schema/manifest.schema.json +++ b/pkg/schema/manifest.schema.json @@ -13,7 +13,7 @@ } }, "credential": { - "description": "Credential defines a particular credential, and where it should be placed in the invocation image", + "description": "Credential defines a particular credential, and where it should be placed in the bundle image", "properties": { "applyTo": { "$ref": "#/definitions/applyTo" @@ -31,7 +31,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where credentials will be mounted", + "description": "The path inside of the bundle image where credentials will be mounted", "type": "string" }, "required": { @@ -45,7 +45,7 @@ "type": "object" }, "output": { - "description": "A value that is produced by running an invocation image", + "description": "A value that is produced by running an bundle image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" @@ -80,7 +80,7 @@ ] }, "parameter": { - "description": "A parameter that can be passed into the invocation image", + "description": "A parameter that can be passed into the bundle image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" @@ -99,7 +99,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where parameter data is mounted", + "description": "The path inside of the bundle image where parameter data is mounted", "type": "string" }, "name": { @@ -146,7 +146,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where the state variable data is mounted", + "description": "The path inside of the bundle image where the state variable data is mounted", "type": "string" }, "name": { @@ -303,7 +303,7 @@ "items": { "$ref": "#/definitions/credential" }, - "description": "Credentials to be injected into the invocation image" + "description": "Credentials to be injected into the bundle image" }, "description": { "type": "string", @@ -344,14 +344,14 @@ "items": { "$ref": "#/definitions/output" }, - "description": "Values that are produced by executing the invocation image" + "description": "Values that are produced by executing the bundle image" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter" }, - "description": "Parameters that can be injected into the invocation image" + "description": "Parameters that can be injected into the bundle image" }, "state": { "description": "State variables that are generated by the bundle and injected on subsequent runs.", diff --git a/pkg/schema/manifest.v1.1.0.schema.json b/pkg/schema/manifest.v1.1.0.schema.json index 293522011..e0acf544d 100644 --- a/pkg/schema/manifest.v1.1.0.schema.json +++ b/pkg/schema/manifest.v1.1.0.schema.json @@ -13,7 +13,7 @@ } }, "credential": { - "description": "Credential defines a particular credential, and where it should be placed in the invocation image", + "description": "Credential defines a particular credential, and where it should be placed in the bundle image", "properties": { "applyTo": { "$ref": "#/definitions/applyTo" @@ -31,7 +31,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where credentials will be mounted", + "description": "The path inside of the bundle image where credentials will be mounted", "type": "string" }, "required": { @@ -45,7 +45,7 @@ "type": "object" }, "output": { - "description": "A value that is produced by running an invocation image", + "description": "A value that is produced by running an bundle image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" @@ -80,7 +80,7 @@ ] }, "parameter": { - "description": "A parameter that can be passed into the invocation image", + "description": "A parameter that can be passed into the bundle image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" @@ -99,7 +99,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where parameter data is mounted", + "description": "The path inside of the bundle image where parameter data is mounted", "type": "string" }, "name": { @@ -146,7 +146,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where the state variable data is mounted", + "description": "The path inside of the bundle image where the state variable data is mounted", "type": "string" }, "name": { @@ -396,7 +396,7 @@ "items": { "$ref": "#/definitions/credential" }, - "description": "Credentials to be injected into the invocation image" + "description": "Credentials to be injected into the bundle image" }, "description": { "type": "string", @@ -437,14 +437,14 @@ "items": { "$ref": "#/definitions/output" }, - "description": "Values that are produced by executing the invocation image" + "description": "Values that are produced by executing the bundle image" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter" }, - "description": "Parameters that can be injected into the invocation image" + "description": "Parameters that can be injected into the bundle image" }, "state": { "description": "State variables that are generated by the bundle and injected on subsequent runs.", diff --git a/pkg/signing/signer.go b/pkg/signing/signer.go index d4cc42792..dfd1419d1 100644 --- a/pkg/signing/signer.go +++ b/pkg/signing/signer.go @@ -3,15 +3,15 @@ package signing import "context" // Signer is an interface for signing and verifying Porter -// bundles and invocation images. +// bundles and bundle images. type Signer interface { Close() error // Sign generates a signature for the specified reference, which - // can be a Porter bundle or an invocation image. + // can be a Porter bundle or an bundle image. Sign(ctx context.Context, ref string) error // Verify attempts to verify a signature for the specified - // reference, which can be a Porter bundle or an invocation image. + // reference, which can be a Porter bundle or an bundle image. Verify(ctx context.Context, ref string) error // TODO Connect(ctx context.Context) error diff --git a/pkg/templates/templates.go b/pkg/templates/templates.go index f8cf617d5..f8ce3b2f7 100644 --- a/pkg/templates/templates.go +++ b/pkg/templates/templates.go @@ -63,7 +63,7 @@ func (t *Templates) GetDockerfileTemplate() ([]byte, error) { return t.fs.ReadFile(tmpl) } -// GetRunScript returns a run script template for invocation images. +// GetRunScript returns a run script template for bundle images. func (t *Templates) GetRunScript() ([]byte, error) { return t.fs.ReadFile("templates/build/cnab/app/run") } @@ -77,7 +77,7 @@ func (t *Templates) GetSchema() ([]byte, error) { return t.fs.ReadFile("templates/schema.json") } -// GetDockerfile returns the default Dockerfile for invocation images. +// GetDockerfile returns the default Dockerfile for bundle images. func (t *Templates) GetDockerfile() ([]byte, error) { tmpl := fmt.Sprintf("templates/build/%s.Dockerfile", t.GetBuildDriver()) return t.fs.ReadFile(tmpl) diff --git a/pkg/templates/templates/create/.dockerignore b/pkg/templates/templates/create/.dockerignore index 0d210e7bb..68c6c7e02 100644 --- a/pkg/templates/templates/create/.dockerignore +++ b/pkg/templates/templates/create/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore template.Dockerfile diff --git a/pkg/templates/templates/create/README.md b/pkg/templates/templates/create/README.md index 031ee298a..645eeecee 100644 --- a/pkg/templates/templates/create/README.md +++ b/pkg/templates/templates/create/README.md @@ -22,7 +22,7 @@ can be deleted. ## template.Dockerfile -This is a template Dockerfile for the bundle's invocation image. You can +This is a template Dockerfile for the bundle image. You can customize it to use different base images, install tools and copy configuration files. Porter will use it as a template and append lines to it for the mixin and to set the CMD appropriately for the CNAB specification. You can delete this file if you don't @@ -35,7 +35,7 @@ dockerfile: template.Dockerfile ``` By default, the Dockerfile template is disabled and Porter automatically copies -all of the files in the current directory into the bundle's invocation image. When +all of the files in the current directory into the bundle image. When you use a custom Dockerfile template, you must manually copy files into the bundle using COPY statements in the Dockerfile template. @@ -47,5 +47,5 @@ delete it if you don't need it. ## .dockerignore -This is a default file that controls which files are copied into the bundle's -invocation image by default. You can delete it if you don't need it. \ No newline at end of file +This is a default file that controls which files are copied into the bundle +image by default. You can delete it if you don't need it. \ No newline at end of file diff --git a/pkg/templates/templates/create/template.buildkit.Dockerfile b/pkg/templates/templates/create/template.buildkit.Dockerfile index 7be960918..2e85fbd19 100644 --- a/pkg/templates/templates/create/template.buildkit.Dockerfile +++ b/pkg/templates/templates/create/template.buildkit.Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile-upstream:1.4.0 -# This is a template Dockerfile for the bundle's invocation image +# This is a template Dockerfile for the bundle image # You can customize it to use different base images, install tools and copy configuration files. # # Porter will use it as a template and append lines to it for the mixins diff --git a/tests/integration/pull_test.go b/tests/integration/pull_test.go index fec9bdd94..3401a423e 100644 --- a/tests/integration/pull_test.go +++ b/tests/integration/pull_test.go @@ -23,6 +23,6 @@ func TestPull_ContentDigestMissing(t *testing.T) { cachedBun, err := p.PullBundle(ctx, opts) require.Contains(t, err.Error(), - "unable to verify that the pulled image getporterci/mysql-installer:no-content-digest is the invocation image referenced by the bundle because the bundle does not specify a content digest. This could allow for the invocation image to be replaced or tampered with") + "unable to verify that the pulled image getporterci/mysql-installer:no-content-digest is the bundle image referenced by the bundle because the bundle does not specify a content digest. This could allow for the bundle image to be replaced or tampered with") require.Equal(t, cache.CachedBundle{}, cachedBun) } diff --git a/tests/integration/registry_integration_test.go b/tests/integration/registry_integration_test.go index 2756757ae..5dcaa32d8 100644 --- a/tests/integration/registry_integration_test.go +++ b/tests/integration/registry_integration_test.go @@ -29,7 +29,7 @@ func TestRegistry(t *testing.T) { tags, err := r.ListTags(ctx, repo, regOpts) require.NoError(t, err, "ListTags failed") require.Contains(t, tags, "v0.2.0", "expected a tag for the bundle version") - require.Contains(t, tags, "3cb284ae76addb8d56b52bb7d6838351", "expected a tag for the invocation image") + require.Contains(t, tags, "3cb284ae76addb8d56b52bb7d6838351", "expected a tag for the bundle image") // GetBundleMetadata // Validates that we are passing auth when querying the registry diff --git a/tests/integration/signing_test.go b/tests/integration/signing_test.go index 9044f4907..346da123c 100644 --- a/tests/integration/signing_test.go +++ b/tests/integration/signing_test.go @@ -41,7 +41,7 @@ func TestCosign(t *testing.T) { _, output = testr.RequirePorter("install", "--verify-bundle", "--reference", ref.String(), "--insecure-registry") fmt.Println(output) require.Contains(t, output, fmt.Sprintf("bundle signature verified for %s", ref.String())) - require.Contains(t, output, fmt.Sprintf("invocation image signature verified for %s", invocationImageRef.String())) + require.Contains(t, output, fmt.Sprintf("bundle image signature verified for %s", invocationImageRef.String())) } func TestNotation(t *testing.T) { @@ -107,7 +107,7 @@ func TestNotation(t *testing.T) { _, output = testr.RequirePorter("install", "--verify-bundle", "--reference", ref.String(), "--insecure-registry") fmt.Println(output) require.Contains(t, output, fmt.Sprintf("bundle signature verified for %s", ref.String())) - require.Contains(t, output, fmt.Sprintf("invocation image signature verified for %s", invocationImageRef.String())) + require.Contains(t, output, fmt.Sprintf("bundle image signature verified for %s", invocationImageRef.String())) } func toRefWithDigest(t *testing.T, ref cnab.OCIReference) cnab.OCIReference { @@ -120,7 +120,7 @@ func toRefWithDigest(t *testing.T, ref cnab.OCIReference) cnab.OCIReference { } func getInvocationImageDigest(t *testing.T, output string) cnab.OCIReference { - r := regexp.MustCompile(`(?m:^Signing invocation image (localhost:\d+/cosign:porter-[0-9a-z]+)\.)`) + r := regexp.MustCompile(`(?m:^Signing bundle image (localhost:\d+/cosign:porter-[0-9a-z]+)\.)`) matches := r.FindAllStringSubmatch(output, -1) require.Len(t, matches, 1) invocationImageRefString := matches[0][1] diff --git a/tests/integration/testdata/bundles/exec-outputs/.dockerignore b/tests/integration/testdata/bundles/exec-outputs/.dockerignore index 2919244c8..3e393c257 100644 --- a/tests/integration/testdata/bundles/exec-outputs/.dockerignore +++ b/tests/integration/testdata/bundles/exec-outputs/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore Dockerfile.tmpl diff --git a/tests/integration/testdata/schema/schema.json b/tests/integration/testdata/schema/schema.json index 822a0d800..f52c06fd6 100644 --- a/tests/integration/testdata/schema/schema.json +++ b/tests/integration/testdata/schema/schema.json @@ -40,7 +40,7 @@ "type": "object" }, "credential": { - "description": "Credential defines a particular credential, and where it should be placed in the invocation image", + "description": "Credential defines a particular credential, and where it should be placed in the bundle image", "properties": { "applyTo": { "$ref": "#/definitions/applyTo" @@ -58,7 +58,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where credentials will be mounted", + "description": "The path inside of the bundle image where credentials will be mounted", "type": "string" }, "required": { @@ -209,7 +209,7 @@ "type": "object" } ], - "description": "A value that is produced by running an invocation image" + "description": "A value that is produced by running an bundle image" }, "parameter": { "allOf": [ @@ -234,7 +234,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where parameter data is mounted", + "description": "The path inside of the bundle image where parameter data is mounted", "type": "string" }, "sensitive": { @@ -268,7 +268,7 @@ "type": "object" } ], - "description": "A parameter that can be passed into the invocation image" + "description": "A parameter that can be passed into the bundle image" }, "stateVar": { "description": "A state variable that is generated by the bundle and injected on subsequent runs.", @@ -286,7 +286,7 @@ "type": "string" }, "path": { - "description": "The path inside of the invocation image where the state variable data is mounted", + "description": "The path inside of the bundle image where the state variable data is mounted", "type": "string" } }, @@ -633,7 +633,7 @@ }, "properties": { "credentials": { - "description": "Credentials to be injected into the invocation image", + "description": "Credentials to be injected into the bundle image", "items": { "$ref": "#/definitions/credential" }, @@ -724,14 +724,14 @@ "type": "string" }, "outputs": { - "description": "Values that are produced by executing the invocation image", + "description": "Values that are produced by executing the bundle image", "items": { "$ref": "#/definitions/output" }, "type": "array" }, "parameters": { - "description": "Parameters that can be injected into the invocation image", + "description": "Parameters that can be injected into the bundle image", "items": { "$ref": "#/definitions/parameter" }, diff --git a/tests/testdata/myapp/.dockerignore b/tests/testdata/myapp/.dockerignore index 2919244c8..3e393c257 100644 --- a/tests/testdata/myapp/.dockerignore +++ b/tests/testdata/myapp/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore Dockerfile.tmpl diff --git a/tests/testdata/mybuns/.dockerignore b/tests/testdata/mybuns/.dockerignore index 2919244c8..3e393c257 100644 --- a/tests/testdata/mybuns/.dockerignore +++ b/tests/testdata/mybuns/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore Dockerfile.tmpl diff --git a/tests/testdata/mydb/.dockerignore b/tests/testdata/mydb/.dockerignore index 2919244c8..3e393c257 100644 --- a/tests/testdata/mydb/.dockerignore +++ b/tests/testdata/mydb/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore Dockerfile.tmpl diff --git a/tests/testdata/myenv/.dockerignore b/tests/testdata/myenv/.dockerignore index 0d210e7bb..68c6c7e02 100644 --- a/tests/testdata/myenv/.dockerignore +++ b/tests/testdata/myenv/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore template.Dockerfile diff --git a/tests/testdata/myinfra/.dockerignore b/tests/testdata/myinfra/.dockerignore index 0d210e7bb..68c6c7e02 100644 --- a/tests/testdata/myinfra/.dockerignore +++ b/tests/testdata/myinfra/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore template.Dockerfile diff --git a/tests/testdata/mysqldb/.dockerignore b/tests/testdata/mysqldb/.dockerignore index 2919244c8..3e393c257 100644 --- a/tests/testdata/mysqldb/.dockerignore +++ b/tests/testdata/mysqldb/.dockerignore @@ -1,4 +1,4 @@ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Put files here that you don't want copied into your bundle's invocation image +# Put files here that you don't want copied into your bundle image .gitignore Dockerfile.tmpl diff --git a/tests/testdata/porter_home/v0/results/01G1VJHGVCSN7GR7B5Y05DH6GA/01G1VJHH4WTCGB455NG5VTMM1Y.json b/tests/testdata/porter_home/v0/results/01G1VJHGVCSN7GR7B5Y05DH6GA/01G1VJHH4WTCGB455NG5VTMM1Y.json index 42f2a9971..d717308dc 100644 --- a/tests/testdata/porter_home/v0/results/01G1VJHGVCSN7GR7B5Y05DH6GA/01G1VJHH4WTCGB455NG5VTMM1Y.json +++ b/tests/testdata/porter_home/v0/results/01G1VJHGVCSN7GR7B5Y05DH6GA/01G1VJHH4WTCGB455NG5VTMM1Y.json @@ -2,6 +2,6 @@ "id": "01G1VJHH4WTCGB455NG5VTMM1Y", "claimId": "01G1VJHGVCSN7GR7B5Y05DH6GA", "created": "2022-04-29T16:10:02.140731-05:00", - "message": "1 error occurred:\n\t* image digest validation failed: content digest mismatch: invocation image getporter/porter-hello-installer:v0.1.1 was defined in the bundle with the digest sha256:1b5a7b823b2243d95d52cc8dc1510fd91b7a1e240bd63d05d828f29ff4f55e13 but no matching repoDigest was found upon inspecting the image\n\n", + "message": "1 error occurred:\n\t* image digest validation failed: content digest mismatch: bundle image getporter/porter-hello-installer:v0.1.1 was defined in the bundle with the digest sha256:1b5a7b823b2243d95d52cc8dc1510fd91b7a1e240bd63d05d828f29ff4f55e13 but no matching repoDigest was found upon inspecting the image\n\n", "status": "failed" } \ No newline at end of file