← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1445863] [NEW] Unable to pass the parameter hostname to nova-api, when creating an instance.

 

Public bug reported:

When we create an instance, it's unable to pass the parameter hostname to nova-api.
Now, we use display_name as hostname[1], but obviously this is not a good practice because they are independent, In addition, hostname must conform to RFC 952, RFC 1123 specification, but the display name is not necessary.
So we need to pass hostname from the Rest API, and set it into the instance.

change method API.create()  [nova/compute/api.py]
    def create(self, context, instance_type,
               image_href, kernel_id=None, ramdisk_id=None,
               min_count=None, max_count=None,
               display_name=None, display_description=None,
               key_name=None, key_data=None, security_group=None,
               availability_zone=None, user_data=None, metadata=None,
               injected_files=None, admin_password=None,
               block_device_mapping=None, access_ip_v4=None,
               access_ip_v6=None, requested_networks=None, config_drive=None,
               auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
               shutdown_terminate=False, check_server_group_quota=False)
into:
    def create(self, context, instance_type,
               image_href, kernel_id=None, ramdisk_id=None,
               min_count=None, max_count=None,
               display_name=None, display_description=None,
               key_name=None, key_data=None, security_group=None,
               availability_zone=None, user_data=None, metadata=None,
               injected_files=None, admin_password=None,
               block_device_mapping=None, access_ip_v4=None,
               access_ip_v6=None, requested_networks=None, config_drive=None,
               auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
               shutdown_terminate=False, check_server_group_quota=False,
               hostname=None)

ps.
[1] nova/compute/api.py class API._populate_instance_for_create():
    def _populate_instance_names(self, instance, num_instances):
        """Populate instance display_name and hostname."""
        display_name = instance.get('display_name')
        if instance.obj_attr_is_set('hostname'):
            hostname = instance.get('hostname')
        else:
            hostname = None

        if display_name is None:
            display_name = self._default_display_name(instance.uuid)
            instance.display_name = display_name

        if hostname is None and num_instances == 1:
            # NOTE(russellb) In the multi-instance case, we're going to
            # overwrite the display_name using the
            # multi_instance_display_name_template.  We need the default
            # display_name set so that it can be used in the template, though.
            # Only set the hostname here if we're only creating one instance.
            # Otherwise, it will be built after the template based
            # display_name.
            hostname = display_name
            instance.hostname = utils.sanitize_hostname(hostname)

** Affects: nova
     Importance: Undecided
     Assignee: javeme (javaloveme)
         Status: New

** Description changed:

  When we create an instance, it's unable to pass the parameter hostname to nova-api.
  Now, we use display_name as hostname[1], but obviously this is not a good practice because they are independent, In addition, hostname must conform to RFC 952, RFC 1123 specification, but the display name is not necessary.
  So we need to pass hostname from the Rest API, and set it into the instance.
  
  change method API.create()  [nova/compute/api.py]
-     def create(self, context, instance_type,
-                image_href, kernel_id=None, ramdisk_id=None,
-                min_count=None, max_count=None,
-                display_name=None, display_description=None,
-                key_name=None, key_data=None, security_group=None,
-                availability_zone=None, user_data=None, metadata=None,
-                injected_files=None, admin_password=None,
-                block_device_mapping=None, access_ip_v4=None,
-                access_ip_v6=None, requested_networks=None, config_drive=None,
-                auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
-                shutdown_terminate=False, check_server_group_quota=False)
+     def create(self, context, instance_type,
+                image_href, kernel_id=None, ramdisk_id=None,
+                min_count=None, max_count=None,
+                display_name=None, display_description=None,
+                key_name=None, key_data=None, security_group=None,
+                availability_zone=None, user_data=None, metadata=None,
+                injected_files=None, admin_password=None,
+                block_device_mapping=None, access_ip_v4=None,
+                access_ip_v6=None, requested_networks=None, config_drive=None,
+                auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
+                shutdown_terminate=False, check_server_group_quota=False)
  into:
-     def create(self, context, instance_type,
-                image_href, kernel_id=None, ramdisk_id=None,
-                min_count=None, max_count=None,
-                display_name=None, display_description=None,
-                key_name=None, key_data=None, security_group=None,
-                availability_zone=None, user_data=None, metadata=None,
-                injected_files=None, admin_password=None,
-                block_device_mapping=None, access_ip_v4=None,
-                access_ip_v6=None, requested_networks=None, config_drive=None,
-                auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
-                shutdown_terminate=False, check_server_group_quota=False,
-                hostname=None)
+     def create(self, context, instance_type,
+                image_href, kernel_id=None, ramdisk_id=None,
+                min_count=None, max_count=None,
+                display_name=None, display_description=None,
+                key_name=None, key_data=None, security_group=None,
+                availability_zone=None, user_data=None, metadata=None,
+                injected_files=None, admin_password=None,
+                block_device_mapping=None, access_ip_v4=None,
+                access_ip_v6=None, requested_networks=None, config_drive=None,
+                auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
+                shutdown_terminate=False, check_server_group_quota=False,
+                hostname=None)
  
  ps.
- [1] :
-     def _populate_instance_names(self, instance, num_instances):
-         """Populate instance display_name and hostname."""
-         display_name = instance.get('display_name')
-         if instance.obj_attr_is_set('hostname'):
-             hostname = instance.get('hostname')
-         else:
-             hostname = None
+ [1] nova/compute/api.py class API._populate_instance_for_create():
+     def _populate_instance_names(self, instance, num_instances):
+         """Populate instance display_name and hostname."""
+         display_name = instance.get('display_name')
+         if instance.obj_attr_is_set('hostname'):
+             hostname = instance.get('hostname')
+         else:
+             hostname = None
  
-         if display_name is None:
-             display_name = self._default_display_name(instance.uuid)
-             instance.display_name = display_name
+         if display_name is None:
+             display_name = self._default_display_name(instance.uuid)
+             instance.display_name = display_name
  
-         if hostname is None and num_instances == 1:
-             # NOTE(russellb) In the multi-instance case, we're going to
-             # overwrite the display_name using the
-             # multi_instance_display_name_template.  We need the default
-             # display_name set so that it can be used in the template, though.
-             # Only set the hostname here if we're only creating one instance.
-             # Otherwise, it will be built after the template based
-             # display_name.
-             hostname = display_name
-             instance.hostname = utils.sanitize_hostname(hostname)
+         if hostname is None and num_instances == 1:
+             # NOTE(russellb) In the multi-instance case, we're going to
+             # overwrite the display_name using the
+             # multi_instance_display_name_template.  We need the default
+             # display_name set so that it can be used in the template, though.
+             # Only set the hostname here if we're only creating one instance.
+             # Otherwise, it will be built after the template based
+             # display_name.
+             hostname = display_name
+             instance.hostname = utils.sanitize_hostname(hostname)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1445863

Title:
  Unable to pass the parameter hostname to nova-api, when creating an
  instance.

Status in OpenStack Compute (Nova):
  New

Bug description:
  When we create an instance, it's unable to pass the parameter hostname to nova-api.
  Now, we use display_name as hostname[1], but obviously this is not a good practice because they are independent, In addition, hostname must conform to RFC 952, RFC 1123 specification, but the display name is not necessary.
  So we need to pass hostname from the Rest API, and set it into the instance.

  change method API.create()  [nova/compute/api.py]
      def create(self, context, instance_type,
                 image_href, kernel_id=None, ramdisk_id=None,
                 min_count=None, max_count=None,
                 display_name=None, display_description=None,
                 key_name=None, key_data=None, security_group=None,
                 availability_zone=None, user_data=None, metadata=None,
                 injected_files=None, admin_password=None,
                 block_device_mapping=None, access_ip_v4=None,
                 access_ip_v6=None, requested_networks=None, config_drive=None,
                 auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
                 shutdown_terminate=False, check_server_group_quota=False)
  into:
      def create(self, context, instance_type,
                 image_href, kernel_id=None, ramdisk_id=None,
                 min_count=None, max_count=None,
                 display_name=None, display_description=None,
                 key_name=None, key_data=None, security_group=None,
                 availability_zone=None, user_data=None, metadata=None,
                 injected_files=None, admin_password=None,
                 block_device_mapping=None, access_ip_v4=None,
                 access_ip_v6=None, requested_networks=None, config_drive=None,
                 auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,
                 shutdown_terminate=False, check_server_group_quota=False,
                 hostname=None)

  ps.
  [1] nova/compute/api.py class API._populate_instance_for_create():
      def _populate_instance_names(self, instance, num_instances):
          """Populate instance display_name and hostname."""
          display_name = instance.get('display_name')
          if instance.obj_attr_is_set('hostname'):
              hostname = instance.get('hostname')
          else:
              hostname = None

          if display_name is None:
              display_name = self._default_display_name(instance.uuid)
              instance.display_name = display_name

          if hostname is None and num_instances == 1:
              # NOTE(russellb) In the multi-instance case, we're going to
              # overwrite the display_name using the
              # multi_instance_display_name_template.  We need the default
              # display_name set so that it can be used in the template, though.
              # Only set the hostname here if we're only creating one instance.
              # Otherwise, it will be built after the template based
              # display_name.
              hostname = display_name
              instance.hostname = utils.sanitize_hostname(hostname)

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1445863/+subscriptions


Follow ups

References