awslabs / aws-cfn-template-flip

Tool for converting AWS CloudFormation templates between JSON and YAML formats.
Apache License 2.0
994 stars 142 forks source link

Flipping long strings isn't wrapped appropriately #93

Closed trov-madisonhope closed 4 years ago

trov-madisonhope commented 4 years ago

If you take the following sample, flip it to JSON, and back to YAML, it uses the quotes-style multiline string block instead of arrow- or pipe-style. This breaks flipping UserData that embeds syntax from other templating engines. Additionally, we have multiparagraph blocks which are Fn::Joined which are totally mangled by flipping, instead of being turned into a pipe-style block.

Description: |
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas est diam, in malesuada odio ultrices non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id lorem leo. Proin sit amet sem in erat pellentesque pretium id cursus orci. In ac nulla id nisi tempor accumsan. Curabitur convallis tempus mauris non pharetra. Vivamus sit amet dui sed ligula vehicula hendrerit.
  Integer imperdiet nunc ut enim imperdiet, et faucibus erat luctus. Nullam pretium a turpis sed malesuada. Nullam ut arcu a quam laoreet tristique at id ex. Morbi convallis augue a libero elementum, vitae vestibulum lacus accumsan. Nunc ornare iaculis tortor, id accumsan turpis blandit ac. Quisque efficitur cursus malesuada. Nunc a nunc malesuada, aliquet ligula eu, consectetur nisl.
  Duis risus nunc, bibendum finibus dapibus at, vehicula sed lectus. Vestibulum molestie leo ante, quis consequat dui pretium eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent aliquam risus scelerisque elit rhoncus, in consectetur orci ultricies. Donec lobortis leo erat, a imperdiet risus scelerisque a. Cras nec est neque. Sed nibh orci, feugiat quis finibus at, bibendum non felis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc mollis scelerisque nisi a pellentesque. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer at eros dignissim, luctus risus a, convallis tortor.
  Pellentesque vitae bibendum justo, non molestie nisi. Ut luctus facilisis nisi ac ullamcorper. Suspendisse orci ex, efficitur eget gravida tempor, semper a libero. Vivamus sit amet orci vitae felis consequat luctus vel vel nibh. Proin facilisis, nunc eu sodales malesuada, ligula urna varius risus, sed posuere magna urna quis dolor. Proin nec euismod libero. Etiam scelerisque vehicula tincidunt. Mauris vulputate ipsum ac eros lobortis, et condimentum mauris auctor. Praesent a felis sit amet augue lacinia interdum. Duis urna quam, consectetur sed pulvinar in, fringilla eu dolor. Pellentesque feugiat vitae turpis vel rutrum. In quis est lacinia, venenatis lorem eget, efficitur ipsum. Mauris efficitur fringilla leo, at accumsan lorem venenatis ullamcorper. Cras pretium tellus est, vel consequat orci gravida ut.
  Nam lobortis tellus hendrerit volutpat pharetra. Praesent at interdum sapien. Donec condimentum dui vel sollicitudin malesuada. Nunc vitae tempus ipsum. Proin et efficitur ante. Mauris feugiat fringilla ex, eu tincidunt justo. Praesent in dolor porta, varius arcu non, ornare risus. Ut ullamcorper dui molestie sapien hendrerit vestibulum ut at turpis. Donec maximus nec arcu et accumsan. Integer tempus placerat dui, id congue ante semper at. Mauris tempus felis sed risus convallis, nec suscipit ligula molestie. In ornare nulla quam, et eleifend elit rutrum ac. Morbi interdum, nulla ac elementum rutrum, mauris odio faucibus augue, non feugiat tortor tellus vel turpis. Fusce id sem odio. Praesent non maximus leo, a cursus felis.
ctd commented 4 years ago

Similar to https://github.com/awslabs/aws-cfn-template-flip/issues/90

ctd commented 4 years ago

Hi @trov-madisonhope,

Could you please provide examples of what output you are seeing, and what output you expect to see?

trov-madisonhope commented 4 years ago

What I see:

Description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas\
  \ est diam, in malesuada odio ultrices non. Lorem ipsum dolor sit amet, consectetur\
  \ adipiscing elit. Etiam id lorem leo. Proin sit amet sem in erat pellentesque pretium\
  \ id cursus orci. In ac nulla id nisi tempor accumsan. Curabitur convallis tempus\
  \ mauris non pharetra. Vivamus sit amet dui sed ligula vehicula hendrerit.\nInteger\
  \ imperdiet nunc ut enim imperdiet, et faucibus erat luctus. Nullam pretium a turpis\
  \ sed malesuada. Nullam ut arcu a quam laoreet tristique at id ex. Morbi convallis\
  \ augue a libero elementum, vitae vestibulum lacus accumsan. Nunc ornare iaculis\
  \ tortor, id accumsan turpis blandit ac. Quisque efficitur cursus malesuada. Nunc\
  \ a nunc malesuada, aliquet ligula eu, consectetur nisl.\nDuis risus nunc, bibendum\
  \ finibus dapibus at, vehicula sed lectus. Vestibulum molestie leo ante, quis consequat\
  \ dui pretium eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent\
  \ aliquam risus scelerisque elit rhoncus, in consectetur orci ultricies. Donec lobortis\
  \ leo erat, a imperdiet risus scelerisque a. Cras nec est neque. Sed nibh orci,\
  \ feugiat quis finibus at, bibendum non felis. Orci varius natoque penatibus et\
  \ magnis dis parturient montes, nascetur ridiculus mus. Nunc mollis scelerisque\
  \ nisi a pellentesque. Orci varius natoque penatibus et magnis dis parturient montes,\
  \ nascetur ridiculus mus. Integer at eros dignissim, luctus risus a, convallis tortor.\n\
  Pellentesque vitae bibendum justo, non molestie nisi. Ut luctus facilisis nisi ac\
  \ ullamcorper. Suspendisse orci ex, efficitur eget gravida tempor, semper a libero.\
  \ Vivamus sit amet orci vitae felis consequat luctus vel vel nibh. Proin facilisis,\
  \ nunc eu sodales malesuada, ligula urna varius risus, sed posuere magna urna quis\
  \ dolor. Proin nec euismod libero. Etiam scelerisque vehicula tincidunt. Mauris\
  \ vulputate ipsum ac eros lobortis, et condimentum mauris auctor. Praesent a felis\
  \ sit amet augue lacinia interdum. Duis urna quam, consectetur sed pulvinar in,\
  \ fringilla eu dolor. Pellentesque feugiat vitae turpis vel rutrum. In quis est\
  \ lacinia, venenatis lorem eget, efficitur ipsum. Mauris efficitur fringilla leo,\
  \ at accumsan lorem venenatis ullamcorper. Cras pretium tellus est, vel consequat\
  \ orci gravida ut.\nNam lobortis tellus hendrerit volutpat pharetra. Praesent at\
  \ interdum sapien. Donec condimentum dui vel sollicitudin malesuada. Nunc vitae\
  \ tempus ipsum. Proin et efficitur ante. Mauris feugiat fringilla ex, eu tincidunt\
  \ justo. Praesent in dolor porta, varius arcu non, ornare risus. Ut ullamcorper\
  \ dui molestie sapien hendrerit vestibulum ut at turpis. Donec maximus nec arcu\
  \ et accumsan. Integer tempus placerat dui, id congue ante semper at. Mauris tempus\
  \ felis sed risus convallis, nec suscipit ligula molestie. In ornare nulla quam,\
  \ et eleifend elit rutrum ac. Morbi interdum, nulla ac elementum rutrum, mauris\
  \ odio faucibus augue, non feugiat tortor tellus vel turpis. Fusce id sem odio.\
  \ Praesent non maximus leo, a cursus felis."

What I expect to see:

---
Description: |-
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas est diam, in malesuada odio ultrices non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id lorem leo. Proin sit amet sem in erat pellentesque pretium id cursus orci. In ac nulla id nisi tempor accumsan. Curabitur convallis tempus mauris non pharetra. Vivamus sit amet dui sed ligula vehicula hendrerit.
  Integer imperdiet nunc ut enim imperdiet, et faucibus erat luctus. Nullam pretium a turpis sed malesuada. Nullam ut arcu a quam laoreet tristique at id ex. Morbi convallis augue a libero elementum, vitae vestibulum lacus accumsan. Nunc ornare iaculis tortor, id accumsan turpis blandit ac. Quisque efficitur cursus malesuada. Nunc a nunc malesuada, aliquet ligula eu, consectetur nisl.
  Duis risus nunc, bibendum finibus dapibus at, vehicula sed lectus. Vestibulum molestie leo ante, quis consequat dui pretium eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent aliquam risus scelerisque elit rhoncus, in consectetur orci ultricies. Donec lobortis leo erat, a imperdiet risus scelerisque a. Cras nec est neque. Sed nibh orci, feugiat quis finibus at, bibendum non felis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc mollis scelerisque nisi a pellentesque. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer at eros dignissim, luctus risus a, convallis tortor.
  Pellentesque vitae bibendum justo, non molestie nisi. Ut luctus facilisis nisi ac ullamcorper. Suspendisse orci ex, efficitur eget gravida tempor, semper a libero. Vivamus sit amet orci vitae felis consequat luctus vel vel nibh. Proin facilisis, nunc eu sodales malesuada, ligula urna varius risus, sed posuere magna urna quis dolor. Proin nec euismod libero. Etiam scelerisque vehicula tincidunt. Mauris vulputate ipsum ac eros lobortis, et condimentum mauris auctor. Praesent a felis sit amet augue lacinia interdum. Duis urna quam, consectetur sed pulvinar in, fringilla eu dolor. Pellentesque feugiat vitae turpis vel rutrum. In quis est lacinia, venenatis lorem eget, efficitur ipsum. Mauris efficitur fringilla leo, at accumsan lorem venenatis ullamcorper. Cras pretium tellus est, vel consequat orci gravida ut.
  Nam lobortis tellus hendrerit volutpat pharetra. Praesent at interdum sapien. Donec condimentum dui vel sollicitudin malesuada. Nunc vitae tempus ipsum. Proin et efficitur ante. Mauris feugiat fringilla ex, eu tincidunt justo. Praesent in dolor porta, varius arcu non, ornare risus. Ut ullamcorper dui molestie sapien hendrerit vestibulum ut at turpis. Donec maximus nec arcu et accumsan. Integer tempus placerat dui, id congue ante semper at. Mauris tempus felis sed risus convallis, nec suscipit ligula molestie. In ornare nulla quam, et eleifend elit rutrum ac. Morbi interdum, nulla ac elementum rutrum, mauris odio faucibus augue, non feugiat tortor tellus vel turpis. Fusce id sem odio. Praesent non maximus leo, a cursus felis.

See https://www.json2yaml.com/ for some good handling of this long string wrapping behavior.

koiker commented 4 years ago

I have created a sample file test_lorem.yaml with the content:

Description: |
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas est diam, in malesuada odio ultrices non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id lorem leo. Proin sit amet sem in erat pellentesque pretium id cursus orci. In ac nulla id nisi tempor accumsan. Curabitur convallis tempus mauris non pharetra. Vivamus sit amet dui sed ligula vehicula hendrerit.
  Integer imperdiet nunc ut enim imperdiet, et faucibus erat luctus. Nullam pretium a turpis sed malesuada. Nullam ut arcu a quam laoreet tristique at id ex. Morbi convallis augue a libero elementum, vitae vestibulum lacus accumsan. Nunc ornare iaculis tortor, id accumsan turpis blandit ac. Quisque efficitur cursus malesuada. Nunc a nunc malesuada, aliquet ligula eu, consectetur nisl.
  Duis risus nunc, bibendum finibus dapibus at, vehicula sed lectus. Vestibulum molestie leo ante, quis consequat dui pretium eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent aliquam risus scelerisque elit rhoncus, in consectetur orci ultricies. Donec lobortis leo erat, a imperdiet risus scelerisque a. Cras nec est neque. Sed nibh orci, feugiat quis finibus at, bibendum non felis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc mollis scelerisque nisi a pellentesque. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer at eros dignissim, luctus risus a, convallis tortor.
  Pellentesque vitae bibendum justo, non molestie nisi. Ut luctus facilisis nisi ac ullamcorper. Suspendisse orci ex, efficitur eget gravida tempor, semper a libero. Vivamus sit amet orci vitae felis consequat luctus vel vel nibh. Proin facilisis, nunc eu sodales malesuada, ligula urna varius risus, sed posuere magna urna quis dolor. Proin nec euismod libero. Etiam scelerisque vehicula tincidunt. Mauris vulputate ipsum ac eros lobortis, et condimentum mauris auctor. Praesent a felis sit amet augue lacinia interdum. Duis urna quam, consectetur sed pulvinar in, fringilla eu dolor. Pellentesque feugiat vitae turpis vel rutrum. In quis est lacinia, venenatis lorem eget, efficitur ipsum. Mauris efficitur fringilla leo, at accumsan lorem venenatis ullamcorper. Cras pretium tellus est, vel consequat orci gravida ut.
  Nam lobortis tellus hendrerit volutpat pharetra. Praesent at interdum sapien. Donec condimentum dui vel sollicitudin malesuada. Nunc vitae tempus ipsum. Proin et efficitur ante. Mauris feugiat fringilla ex, eu tincidunt justo. Praesent in dolor porta, varius arcu non, ornare risus. Ut ullamcorper dui molestie sapien hendrerit vestibulum ut at turpis. Donec maximus nec arcu et accumsan. Integer tempus placerat dui, id congue ante semper at. Mauris tempus felis sed risus convallis, nec suscipit ligula molestie. In ornare nulla quam, et eleifend elit rutrum ac. Morbi interdum, nulla ac elementum rutrum, mauris odio faucibus augue, non feugiat tortor tellus vel turpis. Fusce id sem odio. Praesent non maximus leo, a cursus felis.

and run the command: cfn-flip -i yaml -o yaml -c test_lorem.yaml and the output is the same as the input.

Is that the behavior that you expected? I have used the -c parameter that do some opinionated cleanup

koiker commented 4 years ago

Closing due to inactivity.