# File lib/openstack/compute/server.rb, line 54
    def populate(data=nil)
      path = "/servers/#{URI.encode(@id.to_s)}"
      if data.nil? then
          response = @compute.connection.req("GET", path)
          OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
          data = JSON.parse(response.body)["server"]
      end
      @id        = data["id"] || data["uuid"]
      @name      = data["name"]
      @libvirt_id = data["OS-EXT-SRV-ATTR:instance_name"]
      @fault = data["fault"]
      @status    = data["status"]
      @state  = data["OS-EXT-STS:task_state"]
      @progress  = data["progress"]
      @addresses = get_addresses(data["addresses"])
      @metadata  = OpenStack::Compute::Metadata.new(@compute, path, data["metadata"])
      @hostId    = data["hostId"]
      @image   = data["image"] || data["imageId"]
      @flavor  = data["flavor"] || data["flavorId"]
      @key_name = data["key_name"] # if provider uses the keys API extension for accessing servers
      @created = data["created"]
      @security_groups = (data["security_groups"] || [])
      true
    end