diff --git a/cloudbaseinit/plugins/windows/sethostname.py b/cloudbaseinit/plugins/windows/sethostname.py index 9c552693..d13f8c43 100644 --- a/cloudbaseinit/plugins/windows/sethostname.py +++ b/cloudbaseinit/plugins/windows/sethostname.py @@ -14,12 +14,24 @@ # License for the specific language governing permissions and limitations # under the License. +from cloudbaseinit.openstack.common import cfg +from cloudbaseinit.openstack.common import log as logging from cloudbaseinit.osutils import factory as osutils_factory from cloudbaseinit.plugins import base -from cloudbaseinit.openstack.common import log as logging + +opts = [ + cfg.BoolOpt('netbios_host_name_compatibility', default=True, + help='Truncates the hostname to 15 characters for Netbios ' + 'compatibility'), +] + +CONF = cfg.CONF +CONF.register_opts(opts) LOG = logging.getLogger(__name__) +NETBIOS_HOST_NAME_MAX_LEN = 15 + class SetHostNamePlugin(base.BasePlugin): def execute(self, service, shared_data): @@ -30,7 +42,19 @@ class SetHostNamePlugin(base.BasePlugin): osutils = osutils_factory.OSUtilsFactory().get_os_utils() - new_host_name = meta_data['hostname'].split('.', 1)[0] + metadata_host_name = meta_data['hostname'].split('.', 1)[0] + + if (len(metadata_host_name) > NETBIOS_HOST_NAME_MAX_LEN and + CONF.netbios_host_name_compatibility): + new_host_name = metadata_host_name[:NETBIOS_HOST_NAME_MAX_LEN] + LOG.warn('Truncating host name for Netbios compatibility. ' + 'Old name: %(metadata_host_name)s, new name: ' + '%(new_host_name)s' % + {'metadata_host_name': metadata_host_name, + 'new_host_name': new_host_name}) + else: + new_host_name = metadata_host_name + reboot_required = osutils.set_host_name(new_host_name) return (base.PLUGIN_EXECUTION_DONE, reboot_required)