# File lib/openshift-origin-controller/app/models/cloud_user.rb, line 54
  def save
    resultIO = ResultIO.new
    unless persisted?
      #new user record
      resultIO.append(create())
    end

    if applications && !applications.empty? && save_jobs
      gears = []
      tag = ""

      applications.each do |app|
        app.gears.each do |gear|
          if !app.destroyed_gears || !app.destroyed_gears.include?(gear.uuid)
            gears << gear
          end
        end
      end

      handle = RemoteJob.create_parallel_job

      RemoteJob.run_parallel_on_gears(gears, handle) { |exec_handle, gear|
        if save_jobs['removes']
          save_jobs['removes'].each do |action, values|
            case action
            when 'ssh_keys'
              values.each do |value|
                ssh_key = value[0]
                ssh_key_comment = value[1]
                job = gear.ssh_key_job_remove(ssh_key, ssh_key_comment)
                RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
              end
            when 'env_vars'
              values.each do |value|
                env_var_key = value[0]
                job = gear.env_var_job_remove(env_var_key)
                RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
              end
            when 'broker_auth_keys'
              values.each do |value|
                app_uuid = value[0]
                if app_uuid == gear.app.uuid
                  job = gear.broker_auth_key_job_remove
                  RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
                end
              end
            end
          end
        end
        if save_jobs['adds']
          save_jobs['adds'].each do |action, values|
            case action
            when 'ssh_keys'
              values.each do |value|
                ssh_key = value[0]
                ssh_key_type = value[1]
                ssh_key_comment = value[2]
                job = gear.ssh_key_job_add(ssh_key, ssh_key_type, ssh_key_comment)
                RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
              end
            when 'env_vars'
              values.each do |value|
                env_var_key = value[0]
                env_var_value = value[1]
                job = gear.env_var_job_add(env_var_key, env_var_value)
                RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
              end
            when 'broker_auth_keys'
              values.each do |value|
                app_uuid = value[0]
                if app_uuid == gear.app.uuid
                  iv = value[1]
                  token = value[2]
                  job = gear.broker_auth_key_job_add(iv, token)
                  RemoteJob.add_parallel_job(exec_handle, tag, gear, job)
                end
              end
            end
          end
        end
      }
      RemoteJob.get_parallel_run_results(handle) { |tag, gear, output, status|
        if status != 0
          raise OpenShift::NodeException.new("Error updating settings on gear: #{gear} with status: #{status} and output: #{output}", 143)
        end
      }
      save_jobs['removes'].clear if save_jobs['removes']
      save_jobs['adds'].clear if save_jobs['adds']
    end

    super(@login)

    resultIO
  end