3535import hudson .model .Run ;
3636import hudson .model .TaskListener ;
3737import java .io .IOException ;
38- import java .util .Collections ;
3938import java .util .HashMap ;
4039import java .util .Map ;
4140import java .util .Objects ;
4443import org .jenkinsci .plugins .docker .commons .credentials .DockerRegistryEndpoint ;
4544import org .jenkinsci .plugins .docker .commons .credentials .KeyMaterialFactory ;
4645import org .jenkinsci .plugins .docker .commons .tools .DockerTool ;
46+ import org .jenkinsci .plugins .structs .describable .CustomDescribableModel ;
4747import org .jenkinsci .plugins .structs .describable .UninstantiatedDescribable ;
4848import org .jenkinsci .plugins .workflow .steps .Step ;
4949import org .jenkinsci .plugins .workflow .steps .StepContext ;
@@ -107,7 +107,7 @@ public static class Execution extends AbstractEndpointStepExecution {
107107
108108 }
109109
110- @ Extension public static class DescriptorImpl extends StepDescriptor {
110+ @ Extension public static class DescriptorImpl extends StepDescriptor implements CustomDescribableModel {
111111
112112 @ Override public String getFunctionName () {
113113 return "withDockerRegistry" ;
@@ -126,17 +126,7 @@ public static class Execution extends AbstractEndpointStepExecution {
126126 return true ;
127127 }
128128
129- @ Override public UninstantiatedDescribable uninstantiate (Step step ) throws UnsupportedOperationException {
130- RegistryEndpointStep s = (RegistryEndpointStep ) step ;
131- Map <String , Object > args = new TreeMap <>();
132- args .put ("url" , s .registry .getUrl ());
133- args .put ("credentialsId" , s .registry .getCredentialsId ());
134- args .put ("toolName" , s .toolName );
135- args .values ().removeAll (Collections .singleton (null ));
136- return new UninstantiatedDescribable (args );
137- }
138-
139- @ Override public Step newInstance (Map <String , Object > arguments ) throws Exception {
129+ @ Override public Map <String , Object > customInstantiate (Map <String , Object > arguments ) {
140130 arguments = new HashMap <>(arguments );
141131 if (arguments .containsKey ("url" ) || arguments .containsKey ("credentialsId" )) {
142132 if (arguments .containsKey ("registry" )) {
@@ -146,7 +136,18 @@ public static class Execution extends AbstractEndpointStepExecution {
146136 } else if (!arguments .containsKey ("registry" )) {
147137 throw new IllegalArgumentException ("must specify url/credentialsId (or registry)" );
148138 }
149- return super .newInstance (arguments );
139+ return arguments ;
140+ }
141+
142+ @ Override public UninstantiatedDescribable customUninstantiate (UninstantiatedDescribable ud ) {
143+ Object registry = ud .getArguments ().get ("registry" );
144+ if (registry instanceof UninstantiatedDescribable ) {
145+ Map <String , Object > arguments = new TreeMap <>(ud .getArguments ());
146+ arguments .remove ("registry" );
147+ arguments .putAll (((UninstantiatedDescribable ) registry ).getArguments ());
148+ return ud .withArguments (arguments );
149+ }
150+ return ud ;
150151 }
151152
152153 @ SuppressWarnings ("unchecked" )
0 commit comments