'Install a profile using the install server.
:param profile: Profile name inside the install server database.'

def machine_install(self, profile='', timeout=None):

    if (timeout is None):
        timeout = settings.get_value('INSTALL_SERVER', 'default_install_timeout', type=int, default=3600)
    server_info = get_install_server_info()
    if install_server_is_configured():
        if (not profile):
            profile = self.profile
        if (profile in ['Do_not_install', 'N/A']):
            return
        num_attempts = int(server_info.get('num_attempts', 2))
        ServerInterface = self.INSTALL_SERVER_MAPPING[server_info['type']]
        end_time = (time.time() + (timeout / 10))
        step = int((timeout / 100))
        server_interface = None
        while (time.time() < end_time):
            try:
                server_interface = ServerInterface(**server_info)
                break
            except socket.error:
                logging.error('Install    server    unavailable.    Trying    again    in    %s    s...', step)
                time.sleep(step)
        if (server_interface is None):
            raise InstallServerUnavailable(('%s    install    server    at    (%s)    unavailable.    Tried    to    communicate    for    %s    s' % (server_info['type'], server_info['xmlrpc_url'], (timeout / 10))))
        server_interface.install_host(self, profile=profile, timeout=timeout, num_attempts=num_attempts)
