Merge pull request #347 from mkarebski/master
#328 Fix 65535 string length issue
This commit is contained in:
		
						commit
						4ffc58ecca
					
				|  | @ -13,6 +13,8 @@ import ( | ||||||
| 	k8s "sigs.k8s.io/controller-runtime/pkg/client" | 	k8s "sigs.k8s.io/controller-runtime/pkg/client" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | const groovyUtf8MaxStringLength = 65535 | ||||||
|  | 
 | ||||||
| // ConfigurationAsCode defines API which configures Jenkins with help Configuration as a code plugin
 | // ConfigurationAsCode defines API which configures Jenkins with help Configuration as a code plugin
 | ||||||
| type ConfigurationAsCode struct { | type ConfigurationAsCode struct { | ||||||
| 	groovyClient *groovy.Groovy | 	groovyClient *groovy.Groovy | ||||||
|  | @ -35,16 +37,47 @@ func (c *ConfigurationAsCode) Ensure(jenkins *v1alpha2.Jenkins) (requeue bool, e | ||||||
| 	return c.groovyClient.Ensure(func(name string) bool { | 	return c.groovyClient.Ensure(func(name string) bool { | ||||||
| 		return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml") | 		return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml") | ||||||
| 	}, func(groovyScript string) string { | 	}, func(groovyScript string) string { | ||||||
| 		return fmt.Sprintf(applyConfigurationAsCodeGroovyScriptFmt, groovyScript) | 		return fmt.Sprintf(applyConfigurationAsCodeGroovyScriptFmt, prepareScript(groovyScript)) | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const applyConfigurationAsCodeGroovyScriptFmt = ` | const applyConfigurationAsCodeGroovyScriptFmt = ` | ||||||
| def config = ''' | String[] configContent = ['''%s''']  | ||||||
| %s | def configSb = new StringBuffer() | ||||||
| ''' | for (int i=0; i<configContent.size(); i++) { | ||||||
| def stream = new ByteArrayInputStream(config.getBytes('UTF-8')) |     configSb << configContent[i] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | def stream = new ByteArrayInputStream(configSb.toString().getBytes('UTF-8')) | ||||||
| 
 | 
 | ||||||
| def source = new io.jenkins.plugins.casc.yaml.YamlSource(stream, io.jenkins.plugins.casc.yaml.YamlSource.READ_FROM_INPUTSTREAM) | def source = new io.jenkins.plugins.casc.yaml.YamlSource(stream, io.jenkins.plugins.casc.yaml.YamlSource.READ_FROM_INPUTSTREAM) | ||||||
| io.jenkins.plugins.casc.ConfigurationAsCode.get().configureWith(source) | io.jenkins.plugins.casc.ConfigurationAsCode.get().configureWith(source) | ||||||
| ` | ` | ||||||
|  | 
 | ||||||
|  | func prepareScript(script string) string { | ||||||
|  | 	var slicedScript []string | ||||||
|  | 	if len(script) > groovyUtf8MaxStringLength { | ||||||
|  | 		slicedScript = splitTooLongScript(script) | ||||||
|  | 	} else { | ||||||
|  | 		slicedScript = append(slicedScript, script) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return strings.Join(slicedScript, "''','''") | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func splitTooLongScript(groovyScript string) []string { | ||||||
|  | 	var slicedGroovyScript []string | ||||||
|  | 
 | ||||||
|  | 	lastSubstrIndex := len(groovyScript) % groovyUtf8MaxStringLength | ||||||
|  | 	lastSubstr := groovyScript[len(groovyScript)-lastSubstrIndex:] | ||||||
|  | 
 | ||||||
|  | 	substrNumber := len(groovyScript) / groovyUtf8MaxStringLength | ||||||
|  | 	for i := 0; i < substrNumber; i++ { | ||||||
|  | 		scriptSubstr := groovyScript[i*groovyUtf8MaxStringLength : (i*groovyUtf8MaxStringLength)+groovyUtf8MaxStringLength] | ||||||
|  | 		slicedGroovyScript = append(slicedGroovyScript, scriptSubstr) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	slicedGroovyScript = append(slicedGroovyScript, lastSubstr) | ||||||
|  | 
 | ||||||
|  | 	return slicedGroovyScript | ||||||
|  | } | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
		Reference in New Issue