o
    w7e                  
   @   s   U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dZd	gZeZd
ddeedgeg dZeed< eeZ eeZdd Zdd Zdede
dededdf
ddZdS )z8Migrator: Migrate old versions of cloud-init data to new    N)helpersutil)Cloud)Config)
MetaSchemaget_meta_doc)
PER_ALWAYSaE  This module handles moving old versions of cloud-init data to newer ones.
Currently, it only handles renaming cloud-init's per-frequency semaphore files
to canonicalized name and renaming legacy semaphore names to newer ones. This
module is enabled by default, but can be disabled by specifying ``migrate:
false`` in config.
allcc_migratorMigratorz.Migrate old versions of cloud-init data to newz6# Do not migrate cloud-init semaphores
migrate: false
)idnametitledescriptiondistrosexamples	frequencyactivate_by_schema_keysmetac           
      C   s   | j d| j df}d}|D ]D}|rtj|sqt|D ]3}tj||}tj|rStj	|\}}t
|}||krStj||| }	t||	 |d7 }q q|S )Nsemr      )paths	get_ipath	get_cpathospathexistslistdirjoinisfilesplitextr   canon_sem_nameshutilmove)
cloudr   am_adjustedsem_pathp	full_pathr   ext
canon_namenew_path r,   >/usr/lib/python3/dist-packages/cloudinit/config/cc_migrator.py_migrate_canon_sems-   s"   
	r.   c                 C   s"  dddgi}| j d| j df}|D ]z}|rtj|sqt|}| D ]e\}}|t	|g}g }t
|D ]}	tj|	\}
}|
|v rStj|	rS||	 q:|D ]6}	ttj||	 tj|	\}}|D ]}td|	| ||| W d    n1 sw   Y  qlqVq(qd S )Nzapt-update-upgradeapt_configurepackage_update_upgrade_installr   z*Migrating %s => %s with the same frequency)r   r   r   r   r   r   r   FileSemaphoresitemsr!   r   r    r   appendr   del_filer   LOGdebuglock)r$   legacy_adjustr   r&   
sem_helpermod_name
migrate_to	possibles
old_existsr'   r   _ext_namefreqmr,   r,   r-   _migrate_legacy_sems?   sB   

rB   r   cfgr$   argsreturnc                 C   sH   t |dd}t |std|  d S t|}td| t| d S )NmigrateTz,Skipping module named %s, migration disabledz8Migrated %s semaphore files to there canonicalized names)r   get_cfg_option_strtranslate_boolr5   r6   r.   rB   )r   rC   r$   rD   
do_migrate
sems_movedr,   r,   r-   handle]   s   
rK   )__doc__loggingr   r"   	cloudinitr   r   cloudinit.cloudr   cloudinit.configr   cloudinit.config.schemar   r   cloudinit.settingsr   MODULE_DESCRIPTIONr   r   r   __annotations__	getLogger__name__r5   r.   rB   strlistrK   r,   r,   r,   r-   <module>   s4   
"