diff --git a/backend/kolla/prepare.sh b/backend/kolla/prepare.sh index 3d3be182..a98c56ad 100755 --- a/backend/kolla/prepare.sh +++ b/backend/kolla/prepare.sh @@ -1,5 +1,5 @@ #! /bin/bash - +echo "nameserver 8.8.8.8" > /etc/resolv.conf daisy_management_ip=$1 yum -y install epel-release curl -sSL https://get.docker.io | bash diff --git a/code/daisy/daisy/api/backends/osinstall/pxe/install.py b/code/daisy/daisy/api/backends/osinstall/pxe/install.py index 3f9af012..1acb402e 100755 --- a/code/daisy/daisy/api/backends/osinstall/pxe/install.py +++ b/code/daisy/daisy/api/backends/osinstall/pxe/install.py @@ -489,9 +489,10 @@ class OSInstall(): """ """ Definition for install states.""" - def __init__(self, req, cluster_id): + def __init__(self, req, cluster_id, skip_pxe_ipmi): self.req = req self.cluster_id = cluster_id + self.skip_pxe_ipmi = skip_pxe_ipmi # 5s self.time_step = 5 # 30 min @@ -582,6 +583,11 @@ class OSInstall(): return ipmi_result_flag + def _pxe_os_server_build(self, req): + all_hosts_need_os = get_cluster_hosts_config(req, self.cluster_id) + for host_detail in all_hosts_need_os: + self._install_os_for_baremetal(host_detail) + def _install_os_for_baremetal(self, host_detail): # os_version_file and os_version_id only exist one at # same time @@ -662,29 +668,6 @@ class OSInstall(): hugepagesize = '1G' # tfg_patch_pkg_file = check_tfg_exist() - host_manufacturer = host_detail['system'].get('manufacturer') - if host_detail.get('hwm_id'): - host_hwm_meta = { - "hwm_ip": host_detail.get('hwm_ip'), - "hwm_id": host_detail.get('hwm_id'), - "boot_type": "pxe" - } - self.providerclient(host_hwm_meta['hwm_ip']).node.set_boot( - **host_hwm_meta) - elif host_manufacturer == 'Cisco Systems Inc': - set_pxe_start_of_cisco(host_detail) - else: - if (not host_detail['ipmi_user'] or - not host_detail['ipmi_passwd'] or - not host_detail['ipmi_addr']): - self.message = \ - "Invalid ipmi information configed for host %s" \ - % host_detail['id'] - raise exception.NotFound(message=self.message) - - ipmi_result_flag = self._set_boot_or_power_state(host_detail, - 'pxe') - host_interfaces = _get_host_interfaces(host_detail) kwargs = {'hostname': host_detail['name'], 'iso_path': os_version_file, @@ -736,21 +719,47 @@ class OSInstall(): kwargs['nova_lv_size'] = host_detail['nova_lv_size'] else: kwargs['nova_lv_size'] = 0 - if host_detail.get('hwm_id') or ipmi_result_flag: - rc, error = install_os(**kwargs) - if rc != 0: - install_os_description = error - LOG.info( - _("install os config failed because of '%s'" % error)) - host_status = {'os_status': host_os_status['INSTALL_FAILED'], - 'os_progress': 0, - 'messages': error} - daisy_cmn.update_db_host_status(self.req, host_detail['id'], - host_status) - msg = "ironic install os return failed for host %s" % \ - host_detail['id'] - raise exception.OSInstallFailed(message=msg) + rc, error = install_os(**kwargs) + if rc != 0: + install_os_description = error + LOG.info( + _("install os config failed because of '%s'" % error)) + host_status = {'os_status': host_os_status['INSTALL_FAILED'], + 'os_progress': 0, + 'messages': error} + daisy_cmn.update_db_host_status(self.req, host_detail['id'], + host_status) + msg = "ironic install os return failed for host %s" % \ + host_detail['id'] + raise exception.OSInstallFailed(message=msg) + def _set_boot_pxe(self, host_detail): + ipmi_result_flag = True + host_manufacturer = host_detail['system'].get('manufacturer') + if host_detail.get('hwm_id'): + host_hwm_meta = { + "hwm_ip": host_detail.get('hwm_ip'), + "hwm_id": host_detail.get('hwm_id'), + "boot_type": "pxe" + } + self.providerclient(host_hwm_meta['hwm_ip']).node.set_boot( + **host_hwm_meta) + elif host_manufacturer == 'Cisco Systems Inc': + set_pxe_start_of_cisco(host_detail) + else: + if (not host_detail['ipmi_user'] or + not host_detail['ipmi_passwd'] or + not host_detail['ipmi_addr']): + self.message = \ + "Invalid ipmi information configed for host %s" \ + % host_detail['id'] + raise exception.NotFound(message=self.message) + + ipmi_result_flag = self._set_boot_or_power_state(host_detail, + 'pxe') + return ipmi_result_flag + + def _set_power_reset(self, host_detail): if host_detail.get('hwm_id'): host_hwm_meta = { "hwm_ip": host_detail.get('hwm_ip'), @@ -772,9 +781,14 @@ class OSInstall(): 'messages': 'Preparing for OS installation'} daisy_cmn.update_db_host_status(self.req, host_detail['id'], host_status) - - for host_detail in hosts_detail: - self._install_os_for_baremetal(host_detail) + if self.skip_pxe_ipmi and self.skip_pxe_ipmi == 'true': + return + else: + for host_detail in hosts_detail: + ipmi_result_flag = self._set_boot_pxe(host_detail) + if host_detail.get('hwm_id') or ipmi_result_flag: + self._install_os_for_baremetal(host_detail) + self._set_power_reset(host_detail) def _set_disk_start_mode(self, host_detail): host_manufacturer = host_detail['system'].get('manufacturer') @@ -832,7 +846,10 @@ class OSInstall(): host_status['messages'] = "OS installed successfully" # wait for nicfix script complete time.sleep(10) - self._set_disk_start_mode(host_detail) + if self.skip_pxe_ipmi and self.skip_pxe_ipmi == 'true': + return + else: + self._set_disk_start_mode(host_detail) else: if host_status['os_progress'] ==\ host_last_status['os_progress']: diff --git a/code/daisy/daisy/api/v1/install.py b/code/daisy/daisy/api/v1/install.py index 00a3e85e..348a4c73 100644 --- a/code/daisy/daisy/api/v1/install.py +++ b/code/daisy/daisy/api/v1/install.py @@ -103,9 +103,10 @@ class InstallTask(object): """ """ Definition for install states.""" - def __init__(self, req, cluster_id): + def __init__(self, req, cluster_id, skip_pxe_ipmi): self.req = req self.cluster_id = cluster_id + self.skip_pxe_ipmi = skip_pxe_ipmi def _backends_install(self): backends = get_deployment_backends( @@ -176,7 +177,8 @@ class InstallTask(object): max_parallel_os_num - 1) / max_parallel_os_num recycle_number = 0 while order_hosts_need_os: - os_install = os_handle.OSInstall(self.req, self.cluster_id) + os_install = os_handle.OSInstall( + self.req, self.cluster_id, self.skip_pxe_ipmi) # all os will be installed batch by batch with # max_parallel_os_number which was set in daisy-api.conf (order_hosts_need_os, role_hosts_need_os) = os_install.install_os( @@ -328,8 +330,15 @@ class Controller(controller.BaseController): os_handle = get_os_handle() os_handle.pxe_server_build(req, install_meta) return {"status": "pxe is installed"} - cluster_id = install_meta['cluster_id'] + skip_pxe_ipmi = None + if install_meta.get('skip_pxe_ipmi'): + skip_pxe_ipmi = install_meta['skip_pxe_ipmi'] + if 'pxe_only' in install_meta: + os_handle = get_os_handle() + pxe_build = os_handle.OSInstall(req, cluster_id, skip_pxe_ipmi) + pxe_build._pxe_os_server_build(req) + return {"status": "pxe is installed"} self._enforce(req, 'install_cluster') self._raise_404_if_cluster_deleted(req, cluster_id) self.valid_used_networks(req, cluster_id) @@ -346,7 +355,7 @@ class Controller(controller.BaseController): daisy_cmn.cluster_list_add(cluster_id) # if have hosts need to install os, # TECS installataion executed in InstallTask - os_install_obj = InstallTask(req, cluster_id) + os_install_obj = InstallTask(req, cluster_id, skip_pxe_ipmi) os_install_thread = Thread(target=os_install_obj.run) os_install_thread.start() return {"status": "begin install"} diff --git a/code/daisyclient/daisyclient/v1/install.py b/code/daisyclient/daisyclient/v1/install.py index db529813..7a4b421e 100755 --- a/code/daisyclient/daisyclient/v1/install.py +++ b/code/daisyclient/daisyclient/v1/install.py @@ -22,7 +22,8 @@ from daisyclient.openstack.common.apiclient import base # import daisy.queue_process as queue # from daisy.queue_process import exec_cmd -CREATE_PARAMS = ('cluster_id', 'version_id', 'deployment_interface') +CREATE_PARAMS = ('cluster_id', 'version_id', + 'deployment_interface', 'skip_pxe_ipmi', 'pxe_only') OS_REQ_ID_HDR = 'x-openstack-request-id' diff --git a/code/daisyclient/daisyclient/v1/shell.py b/code/daisyclient/daisyclient/v1/shell.py index 13dd1228..804df3c0 100755 --- a/code/daisyclient/daisyclient/v1/shell.py +++ b/code/daisyclient/daisyclient/v1/shell.py @@ -1589,6 +1589,10 @@ def do_network_detail(gc, args): help='Version of TECS.') @utils.arg('--deployment-interface', metavar='', help='Network interface construction of PXE server(eg:eth0).') +@utils.arg('--skip-pxe-ipmi', metavar='', + help='skip pxe and ipmi(eg:true).') +@utils.arg('--pxe-only', metavar='', + help='build pxe of os(eg:true).') def do_install(dc, args): """Install TECS.""" fields = dict(filter(lambda x: x[1] is not None, vars(args).items())) diff --git a/tools/setup/install/install_func.sh b/tools/setup/install/install_func.sh index 6eea300e..0afd840f 100755 --- a/tools/setup/install/install_func.sh +++ b/tools/setup/install/install_func.sh @@ -77,8 +77,6 @@ function kolla_install check_and_install_rpm python-docker-py check_and_install_rpm ntp systemctl enable ntpd.service - systemctl stop libvirtd.service - systemctl disable libvirtd.service systemctl start ntpd.service check_and_install_rpm ansible check_and_install_rpm python2-crypto diff --git a/tools/setup/install/install_interface.sh b/tools/setup/install/install_interface.sh index c7e143e2..8c6332c6 100644 --- a/tools/setup/install/install_interface.sh +++ b/tools/setup/install/install_interface.sh @@ -68,14 +68,20 @@ function all_install install_rpm_by_yum "daisy" write_install_log "install daisy dashboard rpm" + install_rpm_by_yum "python-django" install_rpm_by_daisy_yum "python-django-horizon" install_rpm_by_yum "daisy-dashboard" write_install_log "install clustershell rpm" install_rpm_by_yum "clustershell" - write_install_log "install ipmitool rpm" + write_install_log "install discover relate rpm" install_rpm_by_yum "ipmitool" + install_rpm_by_yum "syslinux" + + write_install_log "install wget rpm" + install_rpm_by_yum "wget" + if [ -f "/etc/zte-docker" ];then write_install_log "install pxe_docker_install rpm"