def update_node_with_values(node, updates, merge = false)
      updated = []

      # merge the normal attributes (but not tags)
      updated << 'normal' if update_attrs(node, updates['normal'], merge)

      # update runlist
      updated << 'run_list' if update_runlist(node, updates['run_list'])

      # update chef env
      if update_chef_env(node, updates['chef_environment'])
        updated << 'chef_environment'
      end

      # merge tags
      updated << 'tags' if update_tags(node, updates['tags'])

      # return false if no updates, else return array of property names
      !updated.empty? && updated
    end
def update_node_with_values(node, updates, merge = false)
      updated = []

      # merge the normal attributes (but not tags)
      updated << 'normal' if update_attrs(node, updates['normal'], merge)

      # update runlist
      updated << 'run_list' if update_runlist(node, updates['run_list'])

      # update chef env
      if update_chef_env(node, updates['chef_environment'])
        updated << 'chef_environment'
      end

      # merge tags
      updated << 'tags' if update_tags(node, updates['tags'])

      # return false if no updates, else return array of property names
      !updated.empty? && updated
    end
Update original node, return list of updated properties.