Source code for kiwi.storage.subformat.gce

# Copyright (c) 2015 SUSE Linux GmbH.  All rights reserved.
#
# This file is part of kiwi.
#
# kiwi is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# kiwi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with kiwi.  If not, see <http://www.gnu.org/licenses/>
#
import os
from collections import OrderedDict

# project
from kiwi.utils.temporary import Temporary
from kiwi.command import Command
from kiwi.storage.subformat.base import DiskFormatBase
from kiwi.archive.tar import ArchiveTar
from kiwi.system.result import Result


[docs] class DiskFormatGce(DiskFormatBase): """ **Create GCE - Google Compute Engine image format** """
[docs] def post_init(self, custom_args: dict) -> None: """ GCE disk format post initialization method Store disk tag from custom args :param dict custom_args: custom gce argument dictionary .. code:: python {'--tag': 'billing_code'} """ self.image_format = 'gce' self.tag = None if custom_args: ordered_args = OrderedDict(list(custom_args.items())) for key, value in list(ordered_args.items()): if key == '--tag': self.tag = value
[docs] def create_image_format(self) -> None: """ Create GCE disk format and manifest """ gce_tar_ball_file_list = [] temp_image_dir = Temporary( prefix='kiwi_gce_subformat.', path=self.target_dir ).new_dir() diskname = ''.join( [ self.target_dir, '/', self.xml_state.xml_data.get_name(), '.' + self.arch, '-' + self.xml_state.get_image_version(), '.raw' ] ) if self.tag: with open(temp_image_dir.name + '/manifest.json', 'w') as manifest: manifest.write('{"licenses": ["%s"]}' % self.tag) gce_tar_ball_file_list.append('manifest.json') Command.run( ['cp', diskname, temp_image_dir.name + '/disk.raw'] ) gce_tar_ball_file_list.append('disk.raw') archive_name = os.path.basename( self.get_target_file_path_for_format(self.image_format) ) # delete the '.gz' suffix from the name. The suffix is appended by # the archive creation method depending on the creation type. archive_name = archive_name.replace('.gz', '') archive = ArchiveTar( filename=self.target_dir + '/' + archive_name, file_list=gce_tar_ball_file_list ) archive.create_gnu_gzip_compressed( temp_image_dir.name )
[docs] def store_to_result(self, result: Result) -> None: """ Store result file of the gce format conversion into the provided result instance. In this case compression is unwanted because the gce tarball is already created as a compressed archive :param object result: Instance of Result """ result.add( key='disk_format_image', filename=self.get_target_file_path_for_format( self.image_format ), use_for_bundle=True, compress=False, shasum=True )
[docs] def get_target_file_path_for_format(self, format_name): """ Google requires the image name to follow their naming convetion. Therefore it's required to provide a suitable name by overriding the base class method :param string format_name: gce :return: file path name :rtype: str """ if format_name == 'gce': format_name = 'tar.gz' return ''.join( [ self.target_dir, '/', self.xml_state.xml_data.get_name(), '.' + self.arch, '-' + self.xml_state.get_image_version(), '.' + format_name ] )