I have a simple python 2.7.12 script running on both linux and osx providing the same output. When using ruamel during the dump, the value of a boolean seems to convert to all lowercase. As a test when the field is converted to an unquoted string there is no case conversion.
File: test.yml
namespace: default
testapp_appname: testapp
images:
testapp:
path: "foo/testapp"
tag: "202120810083053-1.2.3"
testapp_replicas: 1
testapp_monitoring_enabled: False
testapp_node_selector: ""
My simple test script:
import ruamel
import sys
from ruamel.yaml import YAML
yaml = YAML()
def main():
config_path = "test.yml"
image = "testapp"
timestamp = "202120810083053-"
version = "1.2.3"
config = ruamel.yaml.round_trip_load(open(config_path), preserve_quotes=True)
config['images'][image]['tag'] = "{}{}".format(timestamp, version)
ruamel.yaml.round_trip_dump(config, sys.stdout)
if __name__ == "__main__":
main()
Input:
testapp_monitoring_enabled: False
Output:
testapp_monitoring_enabled: false
You are mixing the new API (
yaml = YAML()
) with the old API (ruamel.yaml.round_trip_dump()
), that is possible but not necessary (nor recommended).ruamel.yaml
doesn't preserve the casing of your booleans (False
,FALSE
), but it is possible to set the values used in the dump using the boolean_representation attribute (this of course affects all booleans):will get you: