HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/config/__pycache__/cc_snap.cpython-310.pyc
o

�Ad��@sUdZddlZddlZddlmZddlmZddlmZddlm	Z	m
Z
ddlmZddl
mZdd	lmZmZdd
lmZddlmZdgZeZe�e�Zd
dded�eed�ed�ed�ed�gedgd�Zeed<ee�ZdZdd�Zdd�Zde dededed e!d!dfd"d#�Z"dS)$z<Snap: Install, configure and manage snapd and snap packages.�N)�Logger)�dedent)�log)�subp�util)�Cloud)�Config)�
MetaSchema�get_meta_doc)�PER_INSTANCE)�prepend_base_command�ubuntu�cc_snap�Snapz5Install, configure and manage snapd and snap packagesah        This module provides a simple configuration namespace in cloud-init to
        both setup snapd and install snaps.

        .. note::
            Both ``assertions`` and ``commands`` values can be either a
            dictionary or a list. If these configs are provided as a
            dictionary, the keys are only used to order the execution of the
            assertions or commands and the dictionary is merged with any
            vendor-data snap configuration provided. If a list is provided by
            the user instead of a dict, any vendor-data snap configuration is
            ignored.

        The ``assertions`` configuration option is a dictionary or list of
        properly-signed snap assertions which will run before any snap
        ``commands``. They will be added to snapd's assertion database by
        invoking ``snap ack <aggregate_assertion_file>``.

        Snap ``commands`` is a dictionary or list of individual snap
        commands to run on the target system. These commands can be used to
        create snap users, install snaps and provide snap configuration.

        .. note::
            If 'side-loading' private/unpublished snaps on an instance, it is
            best to create a snap seed directory and seed.yaml manifest in
            **/var/lib/snapd/seed/** which snapd automatically installs on
            startup.
        ax        snap:
            assertions:
              00: |
                signed_assertion_blob_here
              02: |
                signed_assertion_blob_here
            commands:
              00: snap create-user --sudoer --known <snap-user>@mydomain.com
              01: snap install canonical-livepatch
              02: canonical-livepatch enable <AUTH_TOKEN>
    ay        # Convenience: the snap command can be omitted when specifying commands
        # as a list and 'snap' will automatically be prepended.
        # The following commands are equivalent:
        snap:
          commands:
            00: ['install', 'vlc']
            01: ['snap', 'install', 'vlc']
            02: snap install vlc
            03: 'snap install vlc'
    z�        # You can use a list of commands
        snap:
          commands:
            - ['install', 'vlc']
            - ['snap', 'install', 'vlc']
            - snap install vlc
            - 'snap install vlc'
    z�        # You can use a list of assertions
        snap:
          assertions:
            - signed_assertion_blob_here
            - |
              signed_assertion_blob_here
    �snap)�id�name�title�description�distros�examples�	frequency�activate_by_schema_keys�metacCs�|sdSt�d�t|t�r|��}n
t|t�s tdj|d���td|g}d�	|�}|D]}t�d|�
d�dd	��q,t�||�
d
��tj|dd�dS)
aImport list of assertions.

    Import assertions by concatenating each assertion into a
    string separated by a '
'.  Write this string to a instance file and
    then invoke `snap ack /path/to/file` and check for errors.
    If snap exits 0, then all assertions are imported.
    Nz'Importing user-provided snap assertionsz8assertion parameter was not a list or dict: {assertions})�
assertions�ack�
zSnap acking: %sr�zutf-8T)�capture)�LOG�debug�
isinstance�dict�values�list�	TypeError�format�SNAP_CMD�join�splitr�
write_file�encoder)r�assertions_file�snap_cmd�combined�asrt�r0�:/usr/lib/python3/dist-packages/cloudinit/config/cc_snap.py�add_assertionsxs"



��

r2cCs�|sdSt�d�t|t�rdd�t|���D�}n
t|t�s'tdj|d���t	d|�}g}|D]-}t|t
�}ztj||tj
jd�Wq0tjy]}z
|�t
|��WYd}~q0d}~ww|rpd	j|d
�}t�t|�t|��dS)aHRun the provided commands provided in snap:commands configuration.

    Commands are run individually. Any errors are collected and reported
    after attempting all commands.

    @param commands: A list or dict containing commands to run. Keys of a
        dict will be used to order the commands provided as dict values.
    Nz#Running user-provided snap commandscSsg|]\}}|�qSr0r0)�.0�_�vr0r0r1�
<listcomp>�sz run_commands.<locals>.<listcomp>z5commands parameter was not a list or dict: {commands})�commandsr)�shell�	status_cbz.Failures running snap commands:
{cmd_failures})�cmd_failures)rr r!r"�sorted�itemsr$r%r&r�strr�sys�stderr�write�ProcessExecutionError�appendr�logexc�RuntimeError)r7�fixed_snap_commandsr:�commandr8�e�msgr0r0r1�run_commands�s8	


��

����rIr�cfg�cloudr�args�returncCsV|�di�}|st�d|�dSt|�dg�tj�|j��d��t	|�dg��dS)Nrz8Skipping module named %s, no 'snap' key in configurationrzsnapd.assertionsr7)
�getrr r2�os�pathr(�paths�
get_ipath_currI)rrJrKrrL�cfginr0r0r1�handle�s�
�rT)#�__doc__rOr>�loggingr�textwrapr�	cloudinitrrr�cloudinit.cloudr�cloudinit.configr�cloudinit.config.schemar	r
�cloudinit.settingsr�cloudinit.subprrr�	getLogger�__name__rr�__annotations__r'r2rIr=r$rTr0r0r0r1�<module>sn
���
���2�Z'������