U
    wÚ7e  ã                	   @   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ee
eeddœ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.
ÚallZcc_migratorZMigratorz.Migrate old versions of cloud-init data to newz6# Do not migrate cloud-init semaphores
migrate: false
)ÚidÚnameÚtitleZdescriptionÚdistrosZexamplesÚ	frequencyZactivate_by_schema_keysÚmetac           
      C   s®   | j  d¡| j  d¡f}d}|D ]ˆ}|r tj |¡s6q t |¡D ]f}tj ||¡}tj |¡r@tj 	|¡\}}t
 |¡}||kr@tj ||| ¡}	t ||	¡ |d7 }q@q |S )NÚsemr   é   )ÚpathsÚ	get_ipathÚ	get_cpathÚosÚpathÚexistsÚlistdirÚjoinÚisfileÚsplitextr   Úcanon_sem_nameÚshutilZmove)
Úcloudr   Zam_adjustedÚsem_pathÚpÚ	full_pathr   ZextZ
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 ]à}|r(tj |¡s>q(t |¡}| ¡ D ]¶\}}|t 	|¡g}g }t 
|¡D ]2}	tj |	¡\}
}|
|krttj |	¡rt| |	¡ qt|D ]X}	t tj ||	¡¡ tj |	¡\}}|D ]*}t d|	|¡ | ||¡ W 5 Q R X qØq¬qPq(d S )Nzapt-update-upgradeZapt_configureZpackage_update_upgrade_installr   z*Migrating %s => %s with the same frequency)r   r   r   r   r   r   r   ZFileSemaphoresÚitemsr   r   r   r   Úappendr   Zdel_filer   ÚLOGÚdebugÚlock)r   Zlegacy_adjustr   r   Z
sem_helperÚmod_nameZ
migrate_toZ	possiblesZ
old_existsr    r   Z_extÚ_nameZfreqÚmr#   r#   r$   Ú_migrate_legacy_sems?   s8    þÿ
  ÿr.   )r   Úcfgr   ÚargsÚreturnc                 C   sH   t  |dd¡}t  |¡s(t d| ¡ d S t|ƒ}t d|¡ t|ƒ d S )NZmigrateTz,Skipping module named %s, migration disabledz8Migrated %s semaphore files to there canonicalized names)r   Zget_cfg_option_strZtranslate_boolr(   r)   r%   r.   )r   r/   r   r0   Z
do_migrateZ
sems_movedr#   r#   r$   Úhandle]   s    
 ÿr2   )Ú__doc__Zloggingr   r   Z	cloudinitr   r   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar   r   Zcloudinit.settingsr   ZMODULE_DESCRIPTIONr   r   r   Ú__annotations__Z	getLoggerÚ__name__r(   r%   r.   ÚstrÚlistr2   r#   r#   r#   r$   Ú<module>   s2   ø
