U
    ¯Ad  ã                	   @   sÈ   U d Z ddlZddlZddlm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 dd„ Zdd„ Zeee	eeddœdd„ZdS )z8Migrator: Migrate old versions of cloud-init data to newé    N)ÚLogger)Ú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 ]*}| 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   ÚdebugÚlock)r   ÚlogZ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   r+   ÚargsÚreturnc                 C   sJ   t  |dd¡}t  |¡s(| d| ¡ d S 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   r0   r   r+   r1   Z
do_migrateZ
sems_movedr$   r$   r%   Úhandle\   s    
 ÿr3   )Ú__doc__r   r   Zloggingr   Z	cloudinitr   r   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar   r   Zcloudinit.settingsr	   ZMODULE_DESCRIPTIONr   r   r   Ú__annotations__r&   r/   ÚstrÚlistr3   r$   r$   r$   r%   Ú<module>   s<   ø    þ