def main()

in tools/AduCmdlets-py/CreateSampleComplexUpdate.py [0:0]


def main():
    parser = argparse.ArgumentParser(
        description='Create a sample update with mix of inline and reference install steps')
    parser.add_argument(
        '--path',
        required=True,
        help='Directory to create the import manifest JSON files in')
    parser.add_argument(
        '--update-version',
        required=True,
        help='Version of update to create and import - major.minor[.build[.revision]]')
    args = parser.parse_args()

    output_path = args.path
    update_version = args.update_version

    os.makedirs(output_path, exist_ok=True)

    # Use arbitrary files as update payload files in this sample.
    # Production code would reference real update files.

    # Create child update 1

    print('Preparing child update 1 ("Microphone") ...')

    child_update1_file = open(
        os.path.join(output_path, 'child-update1.txt'),
        'w')
    with child_update1_file:
        child_update1_file.write('This is the child update 1 payload file.')

    child_update1_update_id = adu_update.update_id(
        provider='Contoso',
        name='Microphone',
        version=update_version)

    compatibility_info = adu_update.compatibility_info(
        {
            'manufacturer': 'Contoso',
            'model': 'Microphone'
        })

    installation_step = adu_update.inline_installation_step(
        handler='microsoft/swupdate:1',
        files=[child_update1_file.name])

    child_update1 = adu_update.import_manifest(
        update_id=child_update1_update_id,
        compatibility_infos=[compatibility_info],
        installation_steps=[installation_step],
        is_deployable=False,
        description='This is the Microphone import manifest.')

    # Create child update 2

    print('Preparing child update 2 ("Speaker") ...')

    child_update2_file = open(
        os.path.join(output_path, 'child-update2.txt'),
        'w')
    with child_update2_file:
        child_update2_file.write('This is the child update 2 payload file.')

    child_update2_update_id = adu_update.update_id(
        provider='Contoso',
        name='Speaker',
        version=update_version)

    compatibility_info = adu_update.compatibility_info({
        'manufacturer': 'Contoso',
        'model': 'Speaker'
    })

    installation_step = adu_update.inline_installation_step(
        handler='microsoft/swupdate:1',
        files=[child_update2_file.name])

    child_update2 = adu_update.import_manifest(
        update_id=child_update2_update_id,
        compatibility_infos=[compatibility_info],
        installation_steps=[installation_step],
        is_deployable=False,
        description='This is the Speaker import manifest.')

    # Create the parent update of the child update

    print('Preparing parent update ("SmartDevice") ...')

    parent_file = open(
        os.path.join(output_path, 'parent.txt'),
        'w')
    with parent_file:
        parent_file.write('This is the parent update payload file.')

    parent_update_id = adu_update.update_id(
        provider='Contoso',
        name='SmartDevice',
        version=update_version)

    compatibility_info = adu_update.compatibility_info(
        {
            'manufacturer': 'Contoso',
            'model': 'SmartDevice'
        })

    installation_steps = []
    installation_steps.append(adu_update.inline_installation_step(
        handler='microsoft/script:1',
        files=[parent_file.name],
        handler_properties={'arguments': '--pre'},
        description='Pre-install script'
    ))
    installation_steps.append(adu_update.reference_installation_step(
        update_id=child_update1_update_id,
        description='Microphone Firmware'
    ))
    installation_steps.append(adu_update.reference_installation_step(
        update_id=child_update2_update_id,
        description='Speaker Firmware'
    ))
    installation_steps.append(adu_update.inline_installation_step(
        handler='microsoft/script:1',
        files=[parent_file.name],
        handler_properties={'arguments': '--post'},
        description='Post-install script'
    ))

    parent_update = adu_update.import_manifest(
        update_id=parent_update_id,
        compatibility_infos=[compatibility_info],
        installation_steps=installation_steps,
        description='This is the SmartDevice import manifest.')

    # Write manifest files

    print('Saving manifest files ...')

    child_update1_manifest = os.path.join(
        output_path, f'{child_update1_update_id}.importmanifest.json')
    with open(child_update1_manifest, 'w') as f:
        f.write(str(child_update1))

    child_update2_manifest = os.path.join(
        output_path, f'{child_update2_update_id}.importmanifest.json')
    with open(child_update2_manifest, 'w') as f:
        f.write(str(child_update2))

    parent_update_manifest = os.path.join(
        output_path, f'{parent_update_id}.importmanifest.json')
    with open(parent_update_manifest, 'w') as f:
        f.write(str(parent_update))

    print(f'Import manifest JSON files saved to {output_path}')