title: merge two yaml files in python
body: <p>I have two yaml files as mentioned below</p>
  
  <p>test1.yaml</p>
  
  <pre><code>resources:
    server_group_1:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 5] }
        policies: [ { get_param: [server_group_types, 5] } ]
  
    server_group_2:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 8] }
        policies: [ { get_param: [server_group_types, 8] } ]
  output:
    check_1:
      description: Name of the instance
      value: { get_attr: [check_1, vname] }
  </code></pre>
  
  <p>test2.yaml</p>
  
  <pre><code>resources:
    server_group_4:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 4] }
        policies: [ { get_param: [server_group_types, 4] } ]
  
    server_group_9:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 7] }
        policies: [ { get_param: [server_group_types, 7] } ]
  output:
    check_6:
      description: Name of the instance
      value: { get_attr: [check_6, vname] }
  </code></pre>
  
  <p>I want to merge this two files and create a new output file ,so I use pyyaml the order is getting changed posted same in this <a href="https://stackoverflow.com/questions/47418485/improper-output-with-pyyaml">link</a></p>
  
  <p>Can someone help to merge these files without changing the order?
  Final yaml should be like this</p>
  
  <p>final.yaml</p>
  
  <pre><code>resources:
    server_group_1:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 5] }
        policies: [ { get_param: [server_group_types, 5] } ]
  
    server_group_2:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 8] }
        policies: [ { get_param: [server_group_types, 8] } ]
  
    server_group_4:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 4] }
        policies: [ { get_param: [server_group_types, 4] } ]
  
    server_group_9:
      type: OS::Nova::ServerGroup
      properties:
        name: { get_param: [server_groups, 7] }
        policies: [ { get_param: [server_group_types, 7] } ]
  output:
    check_1:
      description: Name of the instance
      value: { get_attr: [check_1, vname] }
  
    check_6:
      description: Name of the instance
      value: { get_attr: [check_6, vname] } 
  </code></pre>
  
  <p><strong>Updated</strong></p>
  
  <p>I am able to merge files using ruamel.yaml ... here goes the sample code to update resources</p>
  
  <p>code:</p>
  
  <pre><code>import ruamel.yaml
  yaml = ruamel.yaml.YAML()
  #Load the yaml files
  with open('/test1.yaml') as fp:
      data = yaml.load(fp)
  with open('/test2.yaml') as fp:
      data1 = yaml.load(fp)
  #Add the resources from test2.yaml to test1.yaml resources
  for i in data1['resources']:
      print i,data1['resources'][i]
      data['resources'].update({i:data1['resources'][i]})
  #create a new file with merged yaml
  yaml.dump(data,file('/tmp/lal.yaml', 'w'))
  </code></pre>