Your IP : 216.73.217.13


Current Path : /usr/lib/python3/dist-packages/cloudinit/config/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/config/__pycache__/cc_snap.cpython-38.pyc

U

�Ad��
@sUdZddlZddlZddlmZddlmZddlmZddlm	Z	m
Z
ddlmZddl
mZdd	lmZmZdd
lmZddlmZdgZeZe�e�Zd
dded�eed�ed�ed�ed�gedgd�Zeed<ee�ZdZdd�Zdd�Ze eeee!dd�dd�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_commandZubuntuZcc_snapZSnapz5Install, 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�titleZdescription�distrosZexamples�	frequencyZactivate_by_schema_keys�metacCs�|sdSt�d�t|t�r&|��}nt|t�s@tdj|d���td|g}d�	|�}|D]}t�d|�
d�dd	��qXt�||�
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})�
assertionsZack�
zSnap acking: %sr�zutf-8T)Zcapture)�LOG�debug�
isinstance�dict�values�list�	TypeError�format�SNAP_CMD�join�splitrZ
write_file�encoder)rZassertions_fileZsnap_cmdZcombinedZasrt�r#�:/usr/lib/python3/dist-packages/cloudinit/config/cc_snap.py�add_assertionsxs"



��

r%cCs�|sdSt�d�t|t�r4dd�t|���D�}nt|t�sNtdj|d���t	d|�}g}|D]Z}t|t
�}ztj||tj
jd�Wq`tjk
r�}z|�t
|��W5d}~XYq`Xq`|r�d	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|]\}}|�qSr#r#)�.0�_�vr#r#r$�
<listcomp>�sz run_commands.<locals>.<listcomp>z5commands parameter was not a list or dict: {commands})�commandsr
)�shellZ	status_cbz.Failures running snap commands:
{cmd_failures})�cmd_failures)rrrr�sorted�itemsrrrr�strr�sys�stderr�writeZProcessExecutionError�appendrZlogexc�RuntimeError)r*Zfixed_snap_commandsr,Zcommandr+�e�msgr#r#r$�run_commands�s2	


��

"�r7)r�cfg�cloudr�args�returncCsV|�di�}|s t�d|�dSt|�dg�tj�|j��d��t	|�dg��dS)Nr
z8Skipping module named %s, no 'snap' key in configurationrzsnapd.assertionsr*)
�getrrr%�os�pathr �pathsZ
get_ipath_curr7)rr8r9rr:Zcfginr#r#r$�handle�s�
�r@)#�__doc__r=r0Zloggingr�textwraprZ	cloudinitrrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemar	r
Zcloudinit.settingsrZcloudinit.subprrrZ	getLogger�__name__rr�__annotations__rr%r7r/rr@r#r#r#r$�<module>s`
���
���2�Z(�