> @@ -129,14 +129,14 @@ public void testOneRecipe() throws IOException {
>        replay(validatorKey);
>  
>        assertEquals(
> -            fn.apply("foo").render(OsFamily.UNIX),
> +            fn.apply("foo").render(OsFamily.UNIX).replace("\r\n", "\n"),

Great investigations Zach! As you say, Pems.java seems to be the bad boy here: 
https://github.com/jclouds/jclouds/blob/master/core/src/main/java/org/jclouds/crypto/Pems.java#L403

I don't think it is a bug in Pems.java, because it will generate the PEM file 
with the line terminations according to the OS where it is being run.

The bug is in Chef: basically in chef we are composing a script that will be 
uploaded to the node, and in the `render` method we tell the scriptbuilder in 
which target OS the script be executed, so it can be properly generated. The 
problem is that if we are generating the script in a Windows machine, we are 
passing a string literal (the private key in PEM format) with CRLF characters 
to be directly appended to a file, and the scriptbuilder does not manipulate 
the string provided by the user.

I think the correct approach here would be to slightly modify [these 
lines](https://github.com/jclouds/jclouds-chef/blob/master/core/src/main/java/org/jclouds/chef/functions/GroupToBootScript.java?source=cc#L110-111)
 so they return an statement that overrides the render method to do the 
replacement of the line terminations when rendering to UNIX (rendering to 
Windows is still not supported in chef). That statement could be a decorator of 
the current `appendFile` that replaces the line terminations after the delegate 
statement renders the script fragment. This should also allow us to leave the 
tests unchanged.

WDYT?



---
Reply to this email directly or view it on GitHub:
https://github.com/jclouds/jclouds-chef/pull/5/files#r4905205

Reply via email to