def serialize_pre_provision_tasks(cls, cluster): tasks = [] attrs = objects.Attributes.merged_attrs_values(cluster.attributes) is_build_images = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.image ]) if is_build_images: tasks.append( tasks_templates.make_provisioning_images_task( [consts.MASTER_ROLE], attrs['repo_setup']['repos'], attrs['provision'], cluster.id)) # NOTE(kozhukalov): This pre-provision task is going to be # removed by 7.0 because we need this only for classic way of # provision and only until we get rid of it. We are going # to download debian-installer initrd and kernel just before # starting actual provisioning. is_download_debian_installer = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.cobbler ]) if is_download_debian_installer: tasks.append( tasks_templates.make_download_debian_installer_task( [consts.MASTER_ROLE], attrs['repo_setup']['repos'], attrs['repo_setup']['installer_kernel'], attrs['repo_setup']['installer_initrd'])) PriorityStrategy().one_by_one(tasks) return tasks
def test_make_provisioning_images_task(self): result = tasks_templates.make_provisioning_images_task( [1, 2, 3], repos=[{"name": "repo", "uri": "http://some"}], provision_data={"codename": "trusty", "image_data": {"/mount": {"format": "ext4", "uri": "http://uri"}}}, cid=123, ) fuel_image_conf = { "image_data": {"/mount": {"uri": "http://uri", "format": "ext4"}}, "output": "/var/www/nailgun/targetimages", "repos": [{"name": "repo", "uri": "http://some"}], "codename": "trusty", } self.assertEqual(result["type"], "shell") self.assertEqual(result["uids"], [1, 2, 3]) params = result["parameters"].copy() del params["cmd"] self.assertEqual( params, {"timeout": settings.PROVISIONING_IMAGES_BUILD_TIMEOUT, "retries": 1, "interval": 1, "cwd": "/"} ) cmd = ( result["parameters"]["cmd"] .lstrip( "fa_build_image --image_build_dir /var/lib/fuel/ibp " "--log-file /var/log/fuel-agent-env-123.log " "--data_driver nailgun_build_image --input_data '" ) .rstrip("'") ) self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
def serialize_pre_provision_tasks(cls, cluster): tasks = [] attrs = objects.Attributes.merged_attrs_values(cluster.attributes) is_build_images = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.image]) if is_build_images: tasks.append( tasks_templates.make_provisioning_images_task( [consts.MASTER_ROLE], attrs['repo_setup']['repos'], attrs['provision'], cluster.id)) # NOTE(kozhukalov): This pre-provision task is going to be # removed by 7.0 because we need this only for classic way of # provision and only until we get rid of it. We are going # to download debian-installer initrd and kernel just before # starting actual provisioning. is_download_debian_installer = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.cobbler]) if is_download_debian_installer: tasks.append( tasks_templates.make_download_debian_installer_task( [consts.MASTER_ROLE], attrs['repo_setup']['repos'], attrs['repo_setup']['installer_kernel'], attrs['repo_setup']['installer_initrd'])) PriorityStrategy().one_by_one(tasks) return tasks
def test_make_provisioning_images_task(self): packages = [ 'linux-firmware', 'linux-firmware-nonfree', 'linux-headers-generic-lts-trusty', 'linux-image-generic-lts-trusty', ] result = tasks_templates.make_provisioning_images_task( [1, 2, 3], repos=[ {'name': 'repo', 'uri': 'http://some'} ], provision_data={ 'codename': 'trusty', 'image_data': { '/mount': { 'format': 'ext4', 'uri': 'http://uri' } }}, cid=123, packages=packages ) fuel_image_conf = { "image_data": { "/mount": { "uri": "http://uri", "format": "ext4" } }, "output": "/var/www/nailgun/targetimages", "repos": [ { "name": "repo", "uri": "http://some" } ], "codename": "trusty", "packages": packages } self.assertEqual(result["type"], "shell") self.assertEqual(result["uids"], [1, 2, 3]) params = result["parameters"].copy() del params["cmd"] self.assertEqual( params, { 'timeout': settings.PROVISIONING_IMAGES_BUILD_TIMEOUT, 'retries': 1, 'interval': 1, 'cwd': '/', } ) cmd = result["parameters"]["cmd"].lstrip( "fa_build_image --image_build_dir /var/lib/fuel/ibp " "--log-file /var/log/fuel-agent-env-123.log " "--data_driver nailgun_build_image --input_data '").rstrip("'") self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
def test_make_provisioning_images_task(self): packages = [ 'linux-firmware', 'linux-firmware-nonfree', 'linux-headers-generic-lts-trusty', 'linux-image-generic-lts-trusty', ] result = tasks_templates.make_provisioning_images_task( [1, 2, 3], repos=[{ 'name': 'repo', 'uri': 'http://some' }], provision_data={ 'codename': 'trusty', 'image_data': { '/mount': { 'format': 'ext4', 'uri': 'http://uri' } } }, cid=123, packages=packages) fuel_image_conf = { "image_data": { "/mount": { "uri": "http://uri", "format": "ext4" } }, "output": "/var/www/nailgun/targetimages", "repos": [{ "name": "repo", "uri": "http://some" }], "codename": "trusty", "packages": packages } self.assertEqual(result["type"], "shell") self.assertEqual(result["uids"], [1, 2, 3]) params = result["parameters"].copy() del params["cmd"] self.assertEqual( params, { 'timeout': settings.PROVISIONING_IMAGES_BUILD_TIMEOUT, 'retries': 1, 'interval': 1, 'cwd': '/', }) cmd = result["parameters"]["cmd"].lstrip( "fa_build_image --image_build_dir /var/lib/fuel/ibp " "--log-file /var/log/fuel-agent-env-123.log " "--data_driver nailgun_build_image --input_data '").rstrip("'") self.assertEqual(jsonutils.loads(cmd), fuel_image_conf)
def serialize_pre_provision_tasks(cls, cluster): tasks = [] attrs = objects.Attributes.merged_attrs_values(cluster.attributes) is_build_images = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.image ]) if is_build_images: packages = cls._make_provisioning_package_list(attrs['provision']) tasks.append( tasks_templates.make_provisioning_images_task( [consts.MASTER_NODE_UID], attrs['repo_setup']['repos'], attrs['provision'], cluster.id, packages)) PriorityStrategy().one_by_one(tasks) return tasks
def serialize_pre_provision_tasks(cls, cluster): tasks = [] attrs = objects.Attributes.merged_attrs_values(cluster.attributes) is_build_images = all([ cluster.release.operating_system == consts.RELEASE_OS.ubuntu, attrs['provision']['method'] == consts.PROVISION_METHODS.image]) if is_build_images: packages = cls._make_provisioning_package_list(attrs['provision']) tasks.append( tasks_templates.make_provisioning_images_task( [consts.MASTER_NODE_UID], attrs['repo_setup']['repos'], attrs['provision'], cluster.id, packages)) PriorityStrategy().one_by_one(tasks) return tasks
def execute(): """Function to prepare shell script to generate target image""" import sys import six from nailgun.settings import NailgunSettings from nailgun.objects.release import Release from nailgun import consts from nailgun.orchestrator import tasks_templates settings = NailgunSettings() master_ip = settings.config['MASTER_IP'] release_id = sys.argv[1] rel = Release.get_by_uid(release_id) packages_str = \ rel.attributes_metadata['editable']['provision']['packages']['value'] packages = list( six.moves.filter(bool, (s.strip() for s in packages_str.split('\n')))) task = tasks_templates.make_provisioning_images_task( [consts.MASTER_NODE_UID], rel.attributes_metadata['editable']['repo_setup']['repos']['value'], rel.attributes_metadata['generated']['provision'], 'prepare_release_ubuntu', packages) release_str = 'release_{release_id}'.format(release_id=release_id) with open('build_image.sh', 'w') as cmd_file: cmd_file.write(task['parameters']['cmd'].replace( "{cluster.release.environment_version}", rel.environment_version).replace( '{cluster.release.version}', rel.version).replace( '{settings.MASTER_IP}', master_ip).replace( "{cluster.id}", release_str))