-
Notifications
You must be signed in to change notification settings - Fork 401
Support dynamic push credentials obtained from registry #1724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -91,6 +91,18 @@ class BuildExecutor(LoggingConfigurable): | |
| config=True, | ||
| ) | ||
|
|
||
| push_secret_content = Unicode( | ||
| "", | ||
| help=( | ||
| "Content of an implementation dependent secret for pushing image to a registry. " | ||
| "For example, if push tokens are temporary this can be used to pass the token " | ||
| "as an environment variable CONTAINER_ENGINE_REGISTRY_CREDENTIALS to " | ||
| "repo2docker." | ||
| "If provided this will be used instead of push_secret." | ||
| ), | ||
| config=True, | ||
| ) | ||
|
|
||
| memory_limit = ByteSpecification( | ||
| 0, | ||
| help="Memory limit for the build process in bytes (optional suffixes K M G T).", | ||
|
|
@@ -394,7 +406,23 @@ def submit(self): | |
| ) | ||
| ] | ||
|
|
||
| if self.push_secret: | ||
| env = [ | ||
| client.V1EnvVar(name=key, value=value) | ||
| for key, value in self.extra_envs.items() | ||
| ] | ||
| if self.git_credentials: | ||
| env.append( | ||
| client.V1EnvVar(name="GIT_CREDENTIAL_ENV", value=self.git_credentials) | ||
| ) | ||
|
|
||
| if self.push_secret_content: | ||
| env.append( | ||
| client.V1EnvVar( | ||
| name="CONTAINER_ENGINE_REGISTRY_CREDENTIALS", | ||
consideRatio marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| value=self.push_secret_content, | ||
|
||
| ) | ||
| ) | ||
| elif self.push_secret: | ||
| volume_mounts.append( | ||
| client.V1VolumeMount(mount_path="/root/.docker", name="docker-config") | ||
| ) | ||
|
|
@@ -405,15 +433,6 @@ def submit(self): | |
| ) | ||
| ) | ||
|
|
||
| env = [ | ||
| client.V1EnvVar(name=key, value=value) | ||
| for key, value in self.extra_envs.items() | ||
| ] | ||
| if self.git_credentials: | ||
| env.append( | ||
| client.V1EnvVar(name="GIT_CREDENTIAL_ENV", value=self.git_credentials) | ||
| ) | ||
|
|
||
| self.pod = client.V1Pod( | ||
| metadata=client.V1ObjectMeta( | ||
| name=self.name, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall, the
push_secretconfig has been challenging for me to understand well. Here are some notes on what I think can help.push_secretreferences a name (k8s Secret resource for example) as compared to content to put inside one.Thinking about what I'd appreciate from docs to understand this good enough, I'd say something like the following, where its not obvious whats in scope and not for this PR:
push_secretandpush_secret_content's help strings are both are updated to reflect that there are separate ways of providing container registry credentials to the builder, wherepush_secretreferences something existing by name, andpush_secret_contentis content.push_secretandpush_secret_content's help strings are both are updated on how to know what kind of resource to reference and what content to provide. This may be implementation dependent and not something BuildExecutor can know, but I think we can declare here where to find that kind of details.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll update the docs. AFAIK it should be fine to duplicate the traitlet in the subclass to have more specialist documentation?
If it's easier (I'm not sure whether it is), we could switch
push_secretto be of type(Unicode, Dict). where Dict would for example take the form{content: <secret>}or{secret_name: <k8s-secret-name>}.Unicodewould support the current default behaviour.