Remove the use of the mgmt_ip field in host table
This commit to remove the usage of the mgmt_ip in the host table in favor of either controller FQDN for AIO-SX or the management address configured in the address table. Test Plan: PASS: AIO-SX and AIO-DX virtualbox installation IPv4/IPv6 PASS: Standard virtualbox installation IPv6 PASS: DC virtualbox installation IPv4 ( AIO-SX/DX subclouds ) PASS: AIO-SX and AIO-DX installation IPv4/IPv6 PASS: AIO-DX plus installation IPv6 PASS: DC IPv6 and subcloud AIO-SX PASS: AIO-DX host-swact PASS: DC IPv4 virtualbox with subcloud AIO-DX and AIO-DX PASS: AIO-SX to AIO-DX migration PASS: netstat -tupl ( no services are using the MGMT IP address ) PASS: Ran sanity/regression tests PASS: Backup and Restore for AIO-SX/AIO-DX / DC subcloud AIO-SX PASS: Add and unlock worker node on a deployed standard system Story: 2010722 Task: 48567 Depends-on: https://review.opendev.org/c/starlingx/config/+/886208 Signed-off-by: Teresa Ho <teresa.ho@windriver.com> Change-Id: Id2a79ee291b4f706611ebd8eeceaed31e6ca5aa5
This commit is contained in:
parent
a06a299c84
commit
658df6e2f3
|
@ -652,11 +652,11 @@ start()
|
||||||
|
|
||||||
# Apply the puppet manifest
|
# Apply the puppet manifest
|
||||||
HIERADATA_PATH=${PUPPET_CACHE}/hieradata
|
HIERADATA_PATH=${PUPPET_CACHE}/hieradata
|
||||||
HOST_HIERA=${HIERADATA_PATH}/${IPADDR}.yaml
|
HOST_HIERA=${HIERADATA_PATH}/${HOST}.yaml
|
||||||
|
|
||||||
if [ -f ${HOST_HIERA} ]; then
|
if [ -f ${HOST_HIERA} ]; then
|
||||||
echo "$0: Running puppet manifest apply"
|
echo "$0: Running puppet manifest apply"
|
||||||
puppet-manifest-apply.sh ${HIERADATA_PATH} ${IPADDR} ${subfunction}
|
puppet-manifest-apply.sh ${HIERADATA_PATH} ${HOST} ${subfunction}
|
||||||
RC=$?
|
RC=$?
|
||||||
if [ $RC -ne 0 ]
|
if [ $RC -ne 0 ]
|
||||||
then
|
then
|
||||||
|
|
|
@ -165,10 +165,10 @@ start()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Apply the puppet manifest
|
# Apply the puppet manifest
|
||||||
HOST_HIERA=${PUPPET_PATH}/hieradata/${IPADDR}.yaml
|
HOST_HIERA=${PUPPET_PATH}/hieradata/${HOST}.yaml
|
||||||
if [ -f ${HOST_HIERA} ]; then
|
if [ -f ${HOST_HIERA} ]; then
|
||||||
echo "$0: Running puppet manifest apply"
|
echo "$0: Running puppet manifest apply"
|
||||||
puppet-manifest-apply.sh ${PUPPET_PATH}/hieradata ${IPADDR} storage
|
puppet-manifest-apply.sh ${PUPPET_PATH}/hieradata ${HOST} storage
|
||||||
RC=$?
|
RC=$?
|
||||||
if [ $RC -ne 0 ];
|
if [ $RC -ne 0 ];
|
||||||
then
|
then
|
||||||
|
@ -177,7 +177,7 @@ start()
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
umount $PLATFORM_DIR
|
umount $PLATFORM_DIR
|
||||||
fatal_error "Host configuration not yet available for this node ($(hostname)=${IPADDR}); aborting configuration."
|
fatal_error "Host configuration not yet available for this node ($(hostname)=${HOST}); aborting configuration."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Unmount
|
# Unmount
|
||||||
|
|
|
@ -30,7 +30,6 @@ IHOST = {'id': 123,
|
||||||
'hostname': 'cgtshost',
|
'hostname': 'cgtshost',
|
||||||
'personality': 'controller',
|
'personality': 'controller',
|
||||||
'mgmt_mac': '11:22:33:44:55:66',
|
'mgmt_mac': '11:22:33:44:55:66',
|
||||||
'mgmt_ip': '192.168.24.11',
|
|
||||||
'serialid': 'sn123456',
|
'serialid': 'sn123456',
|
||||||
'location': {'City': 'Ottawa'},
|
'location': {'City': 'Ottawa'},
|
||||||
'boot_device': 'sda',
|
'boot_device': 'sda',
|
||||||
|
|
|
@ -28,7 +28,7 @@ def _print_ihost_show(ihost, columns=None, output_format=None):
|
||||||
else:
|
else:
|
||||||
fields = ['id', 'uuid', 'personality', 'hostname', 'invprovision',
|
fields = ['id', 'uuid', 'personality', 'hostname', 'invprovision',
|
||||||
'administrative', 'operational', 'availability', 'task',
|
'administrative', 'operational', 'availability', 'task',
|
||||||
'action', 'mgmt_mac', 'mgmt_ip', 'serialid', 'capabilities',
|
'action', 'mgmt_mac', 'serialid', 'capabilities',
|
||||||
'bm_type', 'bm_username', 'bm_ip', 'config_applied',
|
'bm_type', 'bm_username', 'bm_ip', 'config_applied',
|
||||||
'config_target', 'config_status', 'location', 'uptime',
|
'config_target', 'config_status', 'location', 'uptime',
|
||||||
'reserved', 'created_at', 'updated_at', 'boot_device',
|
'reserved', 'created_at', 'updated_at', 'boot_device',
|
||||||
|
@ -169,10 +169,6 @@ def do_kube_host_upgrade_list(cc, args):
|
||||||
@utils.arg('-m', '--mgmt_mac',
|
@utils.arg('-m', '--mgmt_mac',
|
||||||
metavar='<mgmt_mac>',
|
metavar='<mgmt_mac>',
|
||||||
help='MAC Address of the host mgmt interface [REQUIRED]')
|
help='MAC Address of the host mgmt interface [REQUIRED]')
|
||||||
@utils.arg('-i', '--mgmt_ip',
|
|
||||||
metavar='<mgmt_ip>',
|
|
||||||
help='IP Address of the host mgmt interface (when using static '
|
|
||||||
'address allocation)')
|
|
||||||
@utils.arg('-I', '--bm_ip',
|
@utils.arg('-I', '--bm_ip',
|
||||||
metavar='<bm_ip>',
|
metavar='<bm_ip>',
|
||||||
help="IP Address of the host board management interface, "
|
help="IP Address of the host board management interface, "
|
||||||
|
@ -220,7 +216,7 @@ def do_kube_host_upgrade_list(cc, args):
|
||||||
def do_host_add(cc, args):
|
def do_host_add(cc, args):
|
||||||
"""Add a new host."""
|
"""Add a new host."""
|
||||||
field_list = ['hostname', 'personality', 'subfunctions', 'mgmt_mac',
|
field_list = ['hostname', 'personality', 'subfunctions', 'mgmt_mac',
|
||||||
'mgmt_ip', 'bm_ip', 'bm_type', 'bm_username', 'bm_password',
|
'bm_ip', 'bm_type', 'bm_username', 'bm_password',
|
||||||
'boot_device', 'rootfs_device', 'hw_settle',
|
'boot_device', 'rootfs_device', 'hw_settle',
|
||||||
'install_output', 'console', 'vsc_controllers', 'location',
|
'install_output', 'console', 'vsc_controllers', 'location',
|
||||||
'ttys_dcd', 'clock_synchronization']
|
'ttys_dcd', 'clock_synchronization']
|
||||||
|
|
|
@ -14,7 +14,7 @@ from cgtsclient.v1 import icpu
|
||||||
|
|
||||||
|
|
||||||
CREATION_ATTRIBUTES = ['hostname', 'personality', 'subfunctions', 'mgmt_mac',
|
CREATION_ATTRIBUTES = ['hostname', 'personality', 'subfunctions', 'mgmt_mac',
|
||||||
'mgmt_ip', 'bm_ip', 'bm_type', 'bm_username',
|
'bm_ip', 'bm_type', 'bm_username',
|
||||||
'bm_password', 'serialid', 'location', 'boot_device',
|
'bm_password', 'serialid', 'location', 'boot_device',
|
||||||
'rootfs_device', 'hw_settle', 'install_output',
|
'rootfs_device', 'hw_settle', 'install_output',
|
||||||
'console', 'tboot', 'vsc_controllers', 'ttys_dcd',
|
'console', 'tboot', 'vsc_controllers', 'ttys_dcd',
|
||||||
|
|
|
@ -214,6 +214,7 @@ class AgentManager(service.PeriodicService):
|
||||||
self._ihost_rootfs_device = ""
|
self._ihost_rootfs_device = ""
|
||||||
self._agent_throttle = 0
|
self._agent_throttle = 0
|
||||||
self._mgmt_ip = None
|
self._mgmt_ip = None
|
||||||
|
self._hostname = None
|
||||||
self._prev_disk = None
|
self._prev_disk = None
|
||||||
self._prev_partition = None
|
self._prev_partition = None
|
||||||
self._prev_lvg = None
|
self._prev_lvg = None
|
||||||
|
@ -833,6 +834,7 @@ class AgentManager(service.PeriodicService):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ihost = None
|
ihost = None
|
||||||
|
mgmt_addr = None
|
||||||
rpcapi = conductor_rpcapi.ConductorAPI(
|
rpcapi = conductor_rpcapi.ConductorAPI(
|
||||||
topic=conductor_rpcapi.MANAGER_TOPIC)
|
topic=conductor_rpcapi.MANAGER_TOPIC)
|
||||||
|
|
||||||
|
@ -848,7 +850,21 @@ class AgentManager(service.PeriodicService):
|
||||||
while (timeutils.utcnow() - wait_time).total_seconds() < MAXSLEEP:
|
while (timeutils.utcnow() - wait_time).total_seconds() < MAXSLEEP:
|
||||||
# wait for controller to come up first may be a DOR
|
# wait for controller to come up first may be a DOR
|
||||||
try:
|
try:
|
||||||
ihost = rpcapi.get_ihost_by_macs(icontext, host_macs)
|
ihost, mgmt_addr = rpcapi.get_ihost_by_macs(icontext, host_macs)
|
||||||
|
except ValueError:
|
||||||
|
# Retry because the N-1 host does not support the mgmt_addr
|
||||||
|
# parameter during upgrade
|
||||||
|
try:
|
||||||
|
ihost = rpcapi.get_ihost_by_macs(icontext, host_macs)
|
||||||
|
except Timeout:
|
||||||
|
if not rpc_timeout:
|
||||||
|
rpc_timeout = True
|
||||||
|
LOG.info("get_ihost_by_macs rpc Timeout.")
|
||||||
|
time.sleep(5) # avoid calling timedout RPC in sequence
|
||||||
|
continue
|
||||||
|
except Exception:
|
||||||
|
LOG.warn("Conductor RPC get_ihost_by_macs exception "
|
||||||
|
"response")
|
||||||
except Timeout:
|
except Timeout:
|
||||||
if not rpc_timeout:
|
if not rpc_timeout:
|
||||||
rpc_timeout = True
|
rpc_timeout = True
|
||||||
|
@ -877,11 +893,25 @@ class AgentManager(service.PeriodicService):
|
||||||
|
|
||||||
if ihost:
|
if ihost:
|
||||||
ipersonality = ihost.get('personality') or ""
|
ipersonality = ihost.get('personality') or ""
|
||||||
|
if not mgmt_addr:
|
||||||
|
try:
|
||||||
|
mgmt_addr = rpcapi.get_address_by_host_networktype(
|
||||||
|
icontext, ihost.get('hostname'), constants.NETWORK_TYPE_MGMT)
|
||||||
|
except Timeout:
|
||||||
|
if not rpc_timeout:
|
||||||
|
rpc_timeout = True
|
||||||
|
LOG.info("get_address_by_host_networktype rpc Timeout.")
|
||||||
|
time.sleep(5) # avoid calling timedout RPC in sequence
|
||||||
|
continue
|
||||||
|
except Exception as ex:
|
||||||
|
LOG.warn("Conductor RPC get_address_by_host_networktype "
|
||||||
|
"exception response %s" % ex)
|
||||||
|
|
||||||
if ihost and ipersonality:
|
if ihost and ipersonality:
|
||||||
self._ihost_uuid = ihost['uuid']
|
self._ihost_uuid = ihost['uuid']
|
||||||
self._ihost_personality = ihost['personality']
|
self._ihost_personality = ihost['personality']
|
||||||
self._mgmt_ip = ihost['mgmt_ip']
|
self._mgmt_ip = mgmt_addr
|
||||||
|
self._hostname = ihost['hostname']
|
||||||
self._ihost_rootfs_device = ihost['rootfs_device']
|
self._ihost_rootfs_device = ihost['rootfs_device']
|
||||||
# new fields in ihost: cstates_available and min_cpu_mhz_allowed
|
# new fields in ihost: cstates_available and min_cpu_mhz_allowed
|
||||||
# TODO: These checks are only required for upgrade from version stx8.0.
|
# TODO: These checks are only required for upgrade from version stx8.0.
|
||||||
|
@ -2010,7 +2040,7 @@ class AgentManager(service.PeriodicService):
|
||||||
with open(tmpfile, 'w') as f:
|
with open(tmpfile, 'w') as f:
|
||||||
yaml.dump(config, f, default_flow_style=False)
|
yaml.dump(config, f, default_flow_style=False)
|
||||||
|
|
||||||
puppet.puppet_apply_manifest(self._mgmt_ip,
|
puppet.puppet_apply_manifest(self._hostname,
|
||||||
personality,
|
personality,
|
||||||
'runtime', tmpfile,
|
'runtime', tmpfile,
|
||||||
hieradata_path=hieradata_path)
|
hieradata_path=hieradata_path)
|
||||||
|
|
|
@ -1581,11 +1581,13 @@ class HostController(rest.RestController):
|
||||||
pecan.request.dbapi.network_get_by_type(constants.NETWORK_TYPE_MGMT)
|
pecan.request.dbapi.network_get_by_type(constants.NETWORK_TYPE_MGMT)
|
||||||
|
|
||||||
# Configure the new ihost
|
# Configure the new ihost
|
||||||
ihost_ret = pecan.request.rpcapi.configure_ihost(pecan.request.context,
|
pecan.request.rpcapi.configure_ihost(pecan.request.context, ihost_obj)
|
||||||
ihost_obj)
|
|
||||||
|
|
||||||
# Notify maintenance about updated mgmt_ip
|
# Notify maintenance about updated mgmt_ip
|
||||||
ihost_obj['mgmt_ip'] = ihost_ret.mgmt_ip
|
address_name = cutils.format_address_name(ihost_obj.hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
|
address = pecan.request.dbapi.address_get_by_name(address_name)
|
||||||
|
ihost_obj['mgmt_ip'] = address.address
|
||||||
|
|
||||||
# Add ihost to mtc
|
# Add ihost to mtc
|
||||||
new_ihost_mtc = ihost_obj.as_dict()
|
new_ihost_mtc = ihost_obj.as_dict()
|
||||||
|
@ -2168,14 +2170,16 @@ class HostController(rest.RestController):
|
||||||
raise wsme.exc.ClientSideError(
|
raise wsme.exc.ClientSideError(
|
||||||
_("Please provision 'hostname' and 'personality'."))
|
_("Please provision 'hostname' and 'personality'."))
|
||||||
|
|
||||||
ihost_ret = pecan.request.rpcapi.configure_ihost(
|
pecan.request.rpcapi.configure_ihost(pecan.request.context, ihost_obj)
|
||||||
pecan.request.context, ihost_obj)
|
|
||||||
|
|
||||||
pecan.request.dbapi.ihost_update(
|
pecan.request.dbapi.ihost_update(
|
||||||
ihost_obj['uuid'], {'capabilities': ihost_obj['capabilities']})
|
ihost_obj['uuid'], {'capabilities': ihost_obj['capabilities']})
|
||||||
|
|
||||||
# Notify maintenance about updated mgmt_ip
|
# Notify maintenance about updated mgmt_ip
|
||||||
ihost_obj['mgmt_ip'] = ihost_ret.mgmt_ip
|
address_name = cutils.format_address_name(ihost_obj.hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
|
address = pecan.request.dbapi.address_get_by_name(address_name)
|
||||||
|
ihost_obj['mgmt_ip'] = address.address
|
||||||
|
|
||||||
hostupdate.notify_mtce = True
|
hostupdate.notify_mtce = True
|
||||||
|
|
||||||
|
@ -5505,7 +5509,6 @@ class HostController(rest.RestController):
|
||||||
|
|
||||||
# To unlock, we need the following additional fields
|
# To unlock, we need the following additional fields
|
||||||
if not (hostupdate.ihost_patch['mgmt_mac'] and
|
if not (hostupdate.ihost_patch['mgmt_mac'] and
|
||||||
hostupdate.ihost_patch['mgmt_ip'] and
|
|
||||||
hostupdate.ihost_patch['hostname'] and
|
hostupdate.ihost_patch['hostname'] and
|
||||||
hostupdate.ihost_patch['personality'] and
|
hostupdate.ihost_patch['personality'] and
|
||||||
hostupdate.ihost_patch['subfunctions']):
|
hostupdate.ihost_patch['subfunctions']):
|
||||||
|
|
|
@ -1003,7 +1003,6 @@ class ConductorManager(service.PeriodicService):
|
||||||
"Invalid method call: create_ihost requires mgmt_mac."))
|
"Invalid method call: create_ihost requires mgmt_mac."))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mgmt_update_required = False
|
|
||||||
mac = values['mgmt_mac']
|
mac = values['mgmt_mac']
|
||||||
mac = mac.rstrip()
|
mac = mac.rstrip()
|
||||||
mac = cutils.validate_and_normalize_mac(mac)
|
mac = cutils.validate_and_normalize_mac(mac)
|
||||||
|
@ -1011,34 +1010,6 @@ class ConductorManager(service.PeriodicService):
|
||||||
LOG.info("Not creating ihost for mac: %s because it "
|
LOG.info("Not creating ihost for mac: %s because it "
|
||||||
"already exists with uuid: %s" % (values['mgmt_mac'],
|
"already exists with uuid: %s" % (values['mgmt_mac'],
|
||||||
ihost['uuid']))
|
ihost['uuid']))
|
||||||
mgmt_ip = values.get('mgmt_ip') or ""
|
|
||||||
|
|
||||||
if mgmt_ip and not ihost.mgmt_ip:
|
|
||||||
LOG.info("%s create_ihost setting mgmt_ip to %s" %
|
|
||||||
(ihost.uuid, mgmt_ip))
|
|
||||||
mgmt_update_required = True
|
|
||||||
elif mgmt_ip and ihost.mgmt_ip and \
|
|
||||||
(ihost.mgmt_ip.strip() != mgmt_ip.strip()):
|
|
||||||
# Changing the management IP on an already configured
|
|
||||||
# host should not occur nor be allowed.
|
|
||||||
LOG.error("DANGER %s create_ihost mgmt_ip dnsmasq change "
|
|
||||||
"detected from %s to %s." %
|
|
||||||
(ihost.uuid, ihost.mgmt_ip, mgmt_ip))
|
|
||||||
|
|
||||||
if mgmt_update_required:
|
|
||||||
ihost = self.dbapi.ihost_update(ihost.uuid, values)
|
|
||||||
|
|
||||||
if ihost.personality and ihost.hostname:
|
|
||||||
ihost_mtc = ihost.as_dict()
|
|
||||||
ihost_mtc['operation'] = 'modify'
|
|
||||||
ihost_mtc = cutils.removekeys_nonmtce(ihost_mtc)
|
|
||||||
LOG.info("%s create_ihost update mtce %s " %
|
|
||||||
(ihost.hostname, ihost_mtc))
|
|
||||||
mtce_api.host_modify(
|
|
||||||
self._api_token, self._mtc_address, self._mtc_port,
|
|
||||||
ihost_mtc,
|
|
||||||
constants.MTC_DEFAULT_TIMEOUT_IN_SECS)
|
|
||||||
|
|
||||||
return ihost
|
return ihost
|
||||||
except exception.NodeNotFound:
|
except exception.NodeNotFound:
|
||||||
# If host is not found, check if this is cloning scenario.
|
# If host is not found, check if this is cloning scenario.
|
||||||
|
@ -1749,13 +1720,12 @@ class ConductorManager(service.PeriodicService):
|
||||||
Does the following tasks:
|
Does the following tasks:
|
||||||
- Check if addresses exist for host
|
- Check if addresses exist for host
|
||||||
- Allocate addresses for host from pools
|
- Allocate addresses for host from pools
|
||||||
- Update ihost with mgmt address
|
|
||||||
- Regenerate the dnsmasq hosts file
|
- Regenerate the dnsmasq hosts file
|
||||||
|
|
||||||
:param context: request context
|
:param context: request context
|
||||||
:param host: host object
|
:param host: host object
|
||||||
"""
|
"""
|
||||||
mgmt_ip = host.mgmt_ip
|
|
||||||
mgmt_interfaces = self.iinterfaces_get_by_ihost_nettype(
|
mgmt_interfaces = self.iinterfaces_get_by_ihost_nettype(
|
||||||
context, host.uuid, constants.NETWORK_TYPE_MGMT
|
context, host.uuid, constants.NETWORK_TYPE_MGMT
|
||||||
)
|
)
|
||||||
|
@ -1763,32 +1733,27 @@ class ConductorManager(service.PeriodicService):
|
||||||
if mgmt_interfaces:
|
if mgmt_interfaces:
|
||||||
mgmt_interface_id = mgmt_interfaces[0]['id']
|
mgmt_interface_id = mgmt_interfaces[0]['id']
|
||||||
hostname = host.hostname
|
hostname = host.hostname
|
||||||
address_name = cutils.format_address_name(hostname,
|
|
||||||
constants.NETWORK_TYPE_MGMT)
|
# check for static mgmt IP
|
||||||
# if ihost has mgmt_ip, make sure address in address table
|
mgmt_ip = self._lookup_static_ip_address(
|
||||||
|
hostname, constants.NETWORK_TYPE_MGMT
|
||||||
|
)
|
||||||
|
# make sure address in address table and update dnsmasq host file
|
||||||
if mgmt_ip:
|
if mgmt_ip:
|
||||||
|
LOG.info("Static mgmt ip {} for host{}".format(mgmt_ip, hostname))
|
||||||
self._create_or_update_address(context, hostname, mgmt_ip,
|
self._create_or_update_address(context, hostname, mgmt_ip,
|
||||||
constants.NETWORK_TYPE_MGMT,
|
constants.NETWORK_TYPE_MGMT,
|
||||||
mgmt_interface_id)
|
mgmt_interface_id)
|
||||||
# if ihost has no management IP, check for static mgmt IP
|
|
||||||
if not mgmt_ip:
|
|
||||||
mgmt_ip = self._lookup_static_ip_address(
|
|
||||||
hostname, constants.NETWORK_TYPE_MGMT
|
|
||||||
)
|
|
||||||
if mgmt_ip:
|
|
||||||
host.mgmt_ip = mgmt_ip
|
|
||||||
self.update_ihost(context, host)
|
|
||||||
# if no static address, then allocate one
|
# if no static address, then allocate one
|
||||||
if not mgmt_ip:
|
if not mgmt_ip:
|
||||||
mgmt_pool = self.dbapi.network_get_by_type(
|
mgmt_pool = self.dbapi.network_get_by_type(
|
||||||
constants.NETWORK_TYPE_MGMT
|
constants.NETWORK_TYPE_MGMT
|
||||||
).pool_uuid
|
).pool_uuid
|
||||||
|
address_name = cutils.format_address_name(hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
mgmt_ip = self._allocate_pool_address(mgmt_interface_id, mgmt_pool,
|
mgmt_ip = self._allocate_pool_address(mgmt_interface_id, mgmt_pool,
|
||||||
address_name).address
|
address_name).address
|
||||||
if mgmt_ip:
|
LOG.info("Allocated mgmt ip {} for host{}".format(mgmt_ip, hostname))
|
||||||
host.mgmt_ip = mgmt_ip
|
|
||||||
self.update_ihost(context, host)
|
|
||||||
|
|
||||||
self._generate_dnsmasq_hosts_file(existing_host=host)
|
self._generate_dnsmasq_hosts_file(existing_host=host)
|
||||||
self._allocate_cluster_host_address_for_host(host)
|
self._allocate_cluster_host_address_for_host(host)
|
||||||
|
@ -2519,9 +2484,9 @@ class ConductorManager(service.PeriodicService):
|
||||||
|
|
||||||
if do_worker_apply:
|
if do_worker_apply:
|
||||||
# Apply the manifests immediately
|
# Apply the manifests immediately
|
||||||
puppet_common.puppet_apply_manifest(host.mgmt_ip,
|
puppet_common.puppet_apply_manifest(host.hostname,
|
||||||
constants.WORKER,
|
constants.WORKER,
|
||||||
do_reboot=True)
|
do_reboot=True)
|
||||||
return host
|
return host
|
||||||
|
|
||||||
def unconfigure_ihost(self, context, ihost_obj):
|
def unconfigure_ihost(self, context, ihost_obj):
|
||||||
|
@ -6135,7 +6100,7 @@ class ConductorManager(service.PeriodicService):
|
||||||
|
|
||||||
:param context: an admin context
|
:param context: an admin context
|
||||||
:param ihost_macs: list of mac addresses
|
:param ihost_macs: list of mac addresses
|
||||||
:returns: ihost object, including all fields.
|
:returns: ihost object, including all fields and mgmt address.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ihosts = self.dbapi.ihost_get_list()
|
ihosts = self.dbapi.ihost_get_list()
|
||||||
|
@ -6152,7 +6117,11 @@ class ConductorManager(service.PeriodicService):
|
||||||
for host in ihosts:
|
for host in ihosts:
|
||||||
if host.mgmt_mac == mac:
|
if host.mgmt_mac == mac:
|
||||||
LOG.info("Host found ihost db for macs: %s" % host.hostname)
|
LOG.info("Host found ihost db for macs: %s" % host.hostname)
|
||||||
return host
|
mgmt_addr = None
|
||||||
|
mgmt_addr = self.get_address_by_host_networktype(
|
||||||
|
context, host.hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
|
return host, mgmt_addr
|
||||||
LOG.debug("RPC get_ihost_by_macs called but found no ihost.")
|
LOG.debug("RPC get_ihost_by_macs called but found no ihost.")
|
||||||
|
|
||||||
def get_ihost_by_hostname(self, context, ihost_hostname):
|
def get_ihost_by_hostname(self, context, ihost_hostname):
|
||||||
|
@ -6176,6 +6145,24 @@ class ConductorManager(service.PeriodicService):
|
||||||
|
|
||||||
LOG.debug("RPC ihost_get_by_hostname called but found no ihost.")
|
LOG.debug("RPC ihost_get_by_hostname called but found no ihost.")
|
||||||
|
|
||||||
|
def get_address_by_host_networktype(self, context, name, networktype):
|
||||||
|
"""Finds configured address based on name and network type.
|
||||||
|
|
||||||
|
This method returns an address of the network type for the host.
|
||||||
|
|
||||||
|
:param context: an admin context
|
||||||
|
:param ihost_hostname: ihost hostname
|
||||||
|
:returns: ihost object, including all fields.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
name = cutils.format_address_name(name, networktype)
|
||||||
|
address = self.dbapi.address_get_by_name(name)
|
||||||
|
return address.address
|
||||||
|
except exception.AddressNotFoundByName:
|
||||||
|
pass
|
||||||
|
LOG.info("RPC get_address_by_host_networktype called but found no address.")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _controller_config_active_check():
|
def _controller_config_active_check():
|
||||||
"""Determine whether the active configuration has been finalized"""
|
"""Determine whether the active configuration has been finalized"""
|
||||||
|
@ -15516,12 +15503,6 @@ class ConductorManager(service.PeriodicService):
|
||||||
inventory_completed = False
|
inventory_completed = False
|
||||||
|
|
||||||
if inventory_completed:
|
if inventory_completed:
|
||||||
controller_0_address = self.dbapi.address_get_by_name(
|
|
||||||
constants.CONTROLLER_0_MGMT)
|
|
||||||
if controller_0_address.address != host.mgmt_ip:
|
|
||||||
self.dbapi.ihost_update(
|
|
||||||
host.uuid, {'mgmt_ip': controller_0_address.address})
|
|
||||||
|
|
||||||
personalities = [constants.CONTROLLER]
|
personalities = [constants.CONTROLLER]
|
||||||
config_uuid = self._config_update_hosts(context, personalities)
|
config_uuid = self._config_update_hosts(context, personalities)
|
||||||
config_dict = {
|
config_dict = {
|
||||||
|
|
|
@ -206,7 +206,7 @@ class ConductorAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
|
||||||
|
|
||||||
:param context: an admin context
|
:param context: an admin context
|
||||||
:param ihost_macs: list of mac addresses
|
:param ihost_macs: list of mac addresses
|
||||||
:returns: ihost object, including all fields.
|
:returns: ihost object, including all fields and mgmt address.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return self.call(context,
|
return self.call(context,
|
||||||
|
@ -228,6 +228,23 @@ class ConductorAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
|
||||||
self.make_msg('get_ihost_by_hostname',
|
self.make_msg('get_ihost_by_hostname',
|
||||||
ihost_hostname=ihost_hostname))
|
ihost_hostname=ihost_hostname))
|
||||||
|
|
||||||
|
def get_address_by_host_networktype(self, context, name, networktype):
|
||||||
|
"""Finds ihost db entry based upon the ihost hostname
|
||||||
|
|
||||||
|
This method returns an ihost if it matches the
|
||||||
|
hostname.
|
||||||
|
|
||||||
|
:param context: an admin context
|
||||||
|
:param name: ihost hostname
|
||||||
|
:param networktype: network type
|
||||||
|
:returns: ihost object, including all fields.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self.call(context,
|
||||||
|
self.make_msg('get_address_by_host_networktype',
|
||||||
|
name=name,
|
||||||
|
networktype=networktype))
|
||||||
|
|
||||||
def iport_update_by_ihost(self, context,
|
def iport_update_by_ihost(self, context,
|
||||||
ihost_uuid, inic_dict_array):
|
ihost_uuid, inic_dict_array):
|
||||||
"""Create iports for an ihost with the supplied data.
|
"""Create iports for an ihost with the supplied data.
|
||||||
|
|
|
@ -113,7 +113,10 @@ class FmPuppet(openstack.OpenstackBasePuppet):
|
||||||
if host.hostname == constants.CONTROLLER_1_HOSTNAME:
|
if host.hostname == constants.CONTROLLER_1_HOSTNAME:
|
||||||
host_ip = constants.CONTROLLER_1_FQDN
|
host_ip = constants.CONTROLLER_1_FQDN
|
||||||
else:
|
else:
|
||||||
host_ip = host.mgmt_ip
|
address = self._get_address_by_name(
|
||||||
|
host.hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
|
host_ip = address.address
|
||||||
config = {
|
config = {
|
||||||
'platform::fm::params::api_host': host_ip
|
'platform::fm::params::api_host': host_ip
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,12 +164,13 @@ class KeystonePuppet(openstack.OpenstackBasePuppet):
|
||||||
# The valid format for IPv6 addresses is: inet6:[<ip_v6>]:port
|
# The valid format for IPv6 addresses is: inet6:[<ip_v6>]:port
|
||||||
# Although, for IPv4, the "inet" part is not mandatory, we
|
# Although, for IPv4, the "inet" part is not mandatory, we
|
||||||
# specify if anyway, for consistency purposes.
|
# specify if anyway, for consistency purposes.
|
||||||
if self._get_address_by_name(
|
address = self._get_address_by_name(
|
||||||
constants.CONTROLLER_HOSTNAME,
|
host.hostname,
|
||||||
constants.NETWORK_TYPE_MGMT).family == constants.IPV6_FAMILY:
|
constants.NETWORK_TYPE_MGMT)
|
||||||
backend_endpoint = "[%s]:11211" % host.mgmt_ip
|
if address.family == constants.IPV6_FAMILY:
|
||||||
|
backend_endpoint = "[%s]:11211" % address.address
|
||||||
else:
|
else:
|
||||||
backend_endpoint = "%s:11211" % host.mgmt_ip
|
backend_endpoint = "%s:11211" % address.address
|
||||||
|
|
||||||
config.update({
|
config.update({
|
||||||
'keystone::cache::enabled': True,
|
'keystone::cache::enabled': True,
|
||||||
|
|
|
@ -19,6 +19,7 @@ from tsconfig import tsconfig
|
||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from sysinv.puppet import common
|
from sysinv.puppet import common
|
||||||
|
from sysinv.common import utils
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
@ -213,8 +214,16 @@ class PuppetOperator(object):
|
||||||
"target_load: %s config: %s" %
|
"target_load: %s config: %s" %
|
||||||
(host.hostname, config_uuid, target_load, config))
|
(host.hostname, config_uuid, target_load, config))
|
||||||
|
|
||||||
|
def _get_address_by_name(self, name, networktype):
|
||||||
|
"""
|
||||||
|
Retrieve an address entry by name and scoped by network type
|
||||||
|
"""
|
||||||
|
address_name = utils.format_address_name(name, networktype)
|
||||||
|
address = self.dbapi.address_get_by_name(address_name)
|
||||||
|
return address
|
||||||
|
|
||||||
def _merge_host_config(self, host, target_load, config):
|
def _merge_host_config(self, host, target_load, config):
|
||||||
filename = host.mgmt_ip + '.yaml'
|
filename = host.hostname + '.yaml'
|
||||||
path = os.path.join(
|
path = os.path.join(
|
||||||
tsconfig.PLATFORM_PATH,
|
tsconfig.PLATFORM_PATH,
|
||||||
'puppet',
|
'puppet',
|
||||||
|
@ -232,18 +241,18 @@ class PuppetOperator(object):
|
||||||
def remove_host_config(self, host):
|
def remove_host_config(self, host):
|
||||||
"""Remove the configuration for the supplied host"""
|
"""Remove the configuration for the supplied host"""
|
||||||
try:
|
try:
|
||||||
filename = "%s.yaml" % host.mgmt_ip
|
filename = "%s.yaml" % host.hostname
|
||||||
self._remove_config(filename)
|
self._remove_config(filename)
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception("failed to remove host config: %s" % host.uuid)
|
LOG.exception("failed to remove host config: %s" % host.uuid)
|
||||||
|
|
||||||
def _write_host_config(self, host, config, path=None):
|
def _write_host_config(self, host, config, path=None):
|
||||||
"""Update the configuration for a specific host"""
|
"""Update the configuration for a specific host"""
|
||||||
filename = "%s.yaml" % host.mgmt_ip
|
filename = "%s.yaml" % host.hostname
|
||||||
self._write_config(filename, config, path)
|
self._write_config(filename, config, path)
|
||||||
|
|
||||||
def _read_host_config(self, host, path):
|
def _read_host_config(self, host, path):
|
||||||
filename = "%s.yaml" % host.mgmt_ip
|
filename = "%s.yaml" % host.hostname
|
||||||
return self._read_config(filename, path)
|
return self._read_config(filename, path)
|
||||||
|
|
||||||
def _read_config(self, filename, path):
|
def _read_config(self, filename, path):
|
||||||
|
|
|
@ -71,8 +71,9 @@ class SmPuppet(openstack.OpenstackBasePuppet):
|
||||||
elif host.hostname == constants.CONTROLLER_1_HOSTNAME:
|
elif host.hostname == constants.CONTROLLER_1_HOSTNAME:
|
||||||
host_ip = constants.CONTROLLER_1_FQDN
|
host_ip = constants.CONTROLLER_1_FQDN
|
||||||
else:
|
else:
|
||||||
host_ip = host.mgmt_ip
|
address = self._get_address_by_name(
|
||||||
|
host.hostname, constants.NETWORK_TYPE_MGMT)
|
||||||
|
host_ip = address.address
|
||||||
config = {
|
config = {
|
||||||
'platform::smapi::params::bind_ip': host_ip,
|
'platform::smapi::params::bind_ip': host_ip,
|
||||||
}
|
}
|
||||||
|
|
|
@ -340,6 +340,7 @@ class TestPostWorkerMixin(object):
|
||||||
|
|
||||||
def test_create_host_worker(self):
|
def test_create_host_worker(self):
|
||||||
# Test creation of worker
|
# Test creation of worker
|
||||||
|
self._create_test_host_addresses('worker-0')
|
||||||
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
||||||
personality='worker',
|
personality='worker',
|
||||||
subfunctions=None,
|
subfunctions=None,
|
||||||
|
@ -371,6 +372,7 @@ class TestPostEdgeworkerMixin(object):
|
||||||
|
|
||||||
def test_create_host_worker(self):
|
def test_create_host_worker(self):
|
||||||
# Test creation of worker
|
# Test creation of worker
|
||||||
|
self._create_test_host_addresses('edgeworker-0')
|
||||||
ndict = dbutils.post_get_test_ihost(hostname='edgeworker-0',
|
ndict = dbutils.post_get_test_ihost(hostname='edgeworker-0',
|
||||||
personality='edgeworker',
|
personality='edgeworker',
|
||||||
subfunctions=None,
|
subfunctions=None,
|
||||||
|
@ -1850,6 +1852,7 @@ class TestDelete(TestHost):
|
||||||
# Create controller-0
|
# Create controller-0
|
||||||
self._create_controller_0()
|
self._create_controller_0()
|
||||||
# Create a worker host
|
# Create a worker host
|
||||||
|
self._create_test_host_addresses('worker-0')
|
||||||
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
||||||
personality='worker',
|
personality='worker',
|
||||||
subfunctions=None,
|
subfunctions=None,
|
||||||
|
@ -1925,6 +1928,7 @@ class TestListHosts(TestHost):
|
||||||
self._create_controller_0()
|
self._create_controller_0()
|
||||||
|
|
||||||
# Test creation of worker
|
# Test creation of worker
|
||||||
|
self._create_test_host_addresses('worker-0')
|
||||||
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
ndict = dbutils.post_get_test_ihost(hostname='worker-0',
|
||||||
personality='worker',
|
personality='worker',
|
||||||
subfunctions=None,
|
subfunctions=None,
|
||||||
|
@ -2592,6 +2596,7 @@ class TestPatch(TestHost):
|
||||||
availability=constants.AVAILABILITY_ONLINE)
|
availability=constants.AVAILABILITY_ONLINE)
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
# Unlock worker host
|
# Unlock worker host
|
||||||
response = self._patch_host_action(w0_host['hostname'],
|
response = self._patch_host_action(w0_host['hostname'],
|
||||||
|
@ -2638,6 +2643,7 @@ class TestPatch(TestHost):
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(
|
self._create_test_host_cpus(
|
||||||
w0_host, platform=1, vswitch=2, application=12)
|
w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
# Unlock worker host while lock action in progress
|
# Unlock worker host while lock action in progress
|
||||||
response = self._patch_host_action(w0_host['hostname'],
|
response = self._patch_host_action(w0_host['hostname'],
|
||||||
|
@ -2678,6 +2684,7 @@ class TestPatch(TestHost):
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(
|
self._create_test_host_cpus(
|
||||||
w0_host, platform=1, vswitch=2, application=12)
|
w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
# Unlock worker host while lock action in progress
|
# Unlock worker host while lock action in progress
|
||||||
response = self._patch_host_action(w0_host['hostname'],
|
response = self._patch_host_action(w0_host['hostname'],
|
||||||
|
@ -2856,6 +2863,7 @@ class TestPatch(TestHost):
|
||||||
|
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
w0_hostname = w0_host['hostname']
|
w0_hostname = w0_host['hostname']
|
||||||
response = self._patch_host_action(
|
response = self._patch_host_action(
|
||||||
|
@ -2900,6 +2908,7 @@ class TestPatch(TestHost):
|
||||||
|
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
w0_hostname = w0_host['hostname']
|
w0_hostname = w0_host['hostname']
|
||||||
response = self._patch_host_action(
|
response = self._patch_host_action(
|
||||||
|
@ -3681,6 +3690,7 @@ class TestHostPTPValidation(TestHost):
|
||||||
availability=constants.AVAILABILITY_ONLINE)
|
availability=constants.AVAILABILITY_ONLINE)
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
# Host with PTP must have at least one ptp interface
|
# Host with PTP must have at least one ptp interface
|
||||||
interface = {
|
interface = {
|
||||||
|
@ -3737,6 +3747,7 @@ class TestHostPTPValidation(TestHost):
|
||||||
availability=constants.AVAILABILITY_ONLINE)
|
availability=constants.AVAILABILITY_ONLINE)
|
||||||
self._create_test_host_platform_interface(w0_host)
|
self._create_test_host_platform_interface(w0_host)
|
||||||
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(w0_host, platform=1, vswitch=2, application=12)
|
||||||
|
self._create_test_host_addresses(w0_host.hostname)
|
||||||
|
|
||||||
# Host with PTP must have at least one ptp interface
|
# Host with PTP must have at least one ptp interface
|
||||||
response = self._patch_host_action(
|
response = self._patch_host_action(
|
||||||
|
|
|
@ -2987,8 +2987,14 @@ class ManagerTestCase(base.DbTestCase):
|
||||||
|
|
||||||
def test_get_ihost_by_macs(self):
|
def test_get_ihost_by_macs(self):
|
||||||
self._create_test_ihosts()
|
self._create_test_ihosts()
|
||||||
|
mgmt_net, pxeboot_net = self._create_test_networks(0)
|
||||||
|
address = {'name': 'controller-1-mgmt',
|
||||||
|
'family': 4,
|
||||||
|
'prefix': 24,
|
||||||
|
'address': '192.168.204.3'}
|
||||||
|
utils.create_test_address(**address)
|
||||||
ihost_macs = ['22:44:33:55:11:66', '22:44:33:88:11:66']
|
ihost_macs = ['22:44:33:55:11:66', '22:44:33:88:11:66']
|
||||||
ihost = self.service.get_ihost_by_macs(self.context, ihost_macs)
|
ihost, mgmt_addr = self.service.get_ihost_by_macs(self.context, ihost_macs)
|
||||||
self.assertEqual(ihost.mgmt_mac, '22:44:33:55:11:66')
|
self.assertEqual(ihost.mgmt_mac, '22:44:33:55:11:66')
|
||||||
|
|
||||||
def test_get_ihost_by_macs_no_match(self):
|
def test_get_ihost_by_macs_no_match(self):
|
||||||
|
|
|
@ -452,12 +452,12 @@ class BaseHostTestCase(BaseSystemTestCase):
|
||||||
allocated_function=function))
|
allocated_function=function))
|
||||||
cpu = cpu + 1
|
cpu = cpu + 1
|
||||||
|
|
||||||
def _create_test_host_addresses(self, host):
|
def _create_test_host_addresses(self, hostname):
|
||||||
self._create_test_addresses(
|
self._create_test_addresses(
|
||||||
[host.hostname], self.mgmt_subnet,
|
[hostname], self.mgmt_subnet,
|
||||||
constants.NETWORK_TYPE_MGMT, start=10)
|
constants.NETWORK_TYPE_MGMT, start=10)
|
||||||
self._create_test_addresses(
|
self._create_test_addresses(
|
||||||
[host.hostname], self.cluster_host_subnet,
|
[hostname], self.cluster_host_subnet,
|
||||||
constants.NETWORK_TYPE_CLUSTER_HOST, start=10)
|
constants.NETWORK_TYPE_CLUSTER_HOST, start=10)
|
||||||
|
|
||||||
def _create_test_host_platform_interface(self, host):
|
def _create_test_host_platform_interface(self, host):
|
||||||
|
@ -544,7 +544,7 @@ class WorkerHostTestCase(BaseHostTestCase):
|
||||||
super(WorkerHostTestCase, self).setUp()
|
super(WorkerHostTestCase, self).setUp()
|
||||||
self.host = self._create_test_host(constants.WORKER)
|
self.host = self._create_test_host(constants.WORKER)
|
||||||
self._create_test_host_cpus(self.host, platform=1, vswitch=2, application=12)
|
self._create_test_host_cpus(self.host, platform=1, vswitch=2, application=12)
|
||||||
self._create_test_host_addresses(self.host)
|
self._create_test_host_addresses(self.host.hostname)
|
||||||
|
|
||||||
|
|
||||||
class StorageHostTestCase(BaseHostTestCase):
|
class StorageHostTestCase(BaseHostTestCase):
|
||||||
|
@ -553,7 +553,7 @@ class StorageHostTestCase(BaseHostTestCase):
|
||||||
super(StorageHostTestCase, self).setUp()
|
super(StorageHostTestCase, self).setUp()
|
||||||
self.host = self._create_test_host(constants.STORAGE)
|
self.host = self._create_test_host(constants.STORAGE)
|
||||||
self._create_test_host_cpus(self.host, platform=8)
|
self._create_test_host_cpus(self.host, platform=8)
|
||||||
self._create_test_host_addresses(self.host)
|
self._create_test_host_addresses(self.host.hostname)
|
||||||
|
|
||||||
|
|
||||||
class AIOHostTestCase(BaseHostTestCase):
|
class AIOHostTestCase(BaseHostTestCase):
|
||||||
|
|
|
@ -307,17 +307,17 @@ start()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Apply the puppet manifest
|
# Apply the puppet manifest
|
||||||
HOST_HIERA=${PUPPET_PATH}/hieradata/${IPADDR}.yaml
|
HOST_HIERA=${PUPPET_PATH}/hieradata/${HOST}.yaml
|
||||||
if [ -f ${HOST_HIERA} ]; then
|
if [ -f ${HOST_HIERA} ]; then
|
||||||
echo "$0: Running puppet manifest apply"
|
echo "$0: Running puppet manifest apply"
|
||||||
puppet-manifest-apply.sh ${PUPPET_PATH}/hieradata ${IPADDR} worker
|
puppet-manifest-apply.sh ${PUPPET_PATH}/hieradata ${HOST} worker
|
||||||
RC=$?
|
RC=$?
|
||||||
if [ $RC -ne 0 ];
|
if [ $RC -ne 0 ];
|
||||||
then
|
then
|
||||||
fatal_error "Failed to run the puppet manifest (RC:$RC)"
|
fatal_error "Failed to run the puppet manifest (RC:$RC)"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
fatal_error "Host configuration not yet available for this node ($(hostname)=${IPADDR}); aborting configuration."
|
fatal_error "Host configuration not yet available for this node ($(hostname)=${HOST}); aborting configuration."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Load Network Block Device
|
# Load Network Block Device
|
||||||
|
|
Loading…
Reference in New Issue