add virtual choice of install intreface to avoid ipmi and deploy virtual os
Change-Id: I899508b874e27908821adde5f025868bc200f7b0 Signed-off-by: Yao Lu <lu.yao135@zte.com.cn>
This commit is contained in:
parent
1ca8307de2
commit
4bc3be5ad8
@ -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
|
||||
|
@ -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']:
|
||||
|
@ -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"}
|
||||
|
@ -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'
|
||||
|
||||
|
||||
|
@ -1589,6 +1589,10 @@ def do_network_detail(gc, args):
|
||||
help='Version of TECS.')
|
||||
@utils.arg('--deployment-interface', metavar='<DEPLOYMNET>',
|
||||
help='Network interface construction of PXE server(eg:eth0).')
|
||||
@utils.arg('--skip-pxe-ipmi', metavar='<SKIP>',
|
||||
help='skip pxe and ipmi(eg:true).')
|
||||
@utils.arg('--pxe-only', metavar='<PXE>',
|
||||
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()))
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user