
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meñ  ã            	   @   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eƒZ ej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ÚtitleÚdescriptionÚdistrosZexamplesÚ	frequencyZactivate_by_schema_keysc       
      C   sº   | j jdƒ| j jdƒf}d}x˜|D ]�}| s"tjj|ƒ r<q"xttj|ƒD ]f}tjj||ƒ}tjj|ƒrHtjj	|ƒ\}}t
j|ƒ}||krHtjj||| ƒ}	tj||	ƒ |d7 }qHW q"W |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.6/cc_migrator.pyÚ_migrate_canon_sems-   s    

r%   c             C   s&  dddgi}| j jdƒ| j jdƒf}xü|D ]ô}| s*tjj|ƒ rDq*tj|ƒ}xÎ|jƒ D ]Â\}}|tj	|ƒg}g }x@tj
|ƒD ]2}	tjj|	ƒ\}
}|
|kr~tjj|	ƒr~|j|	ƒ q~W xd|D ]\}	tjtjj||	ƒƒ tjj|	ƒ\}}x2|D ]*}tjd|	|ƒ |j||ƒ� W d Q R X qèW qºW qXW q*W 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_helperZmod_nameZ
migrate_toZ	possiblesZ
old_existsr    r   Z_extÚ_nameZfreqÚmr#   r#   r$   Ú_migrate_legacy_sems?   s.    




r-   )r   Úcfgr   ÚargsÚreturnc             C   sH   t j|ddƒ}t j|ƒs(tjd| ƒ d S t|ƒ}tj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   r/   Z
do_migrateZ
sems_movedr#   r#   r$   Úhandle]   s    
r1   )Ú__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   ÚmetaZ	getLoggerÚ__name__r(   r%   r-   ÚstrÚlistr1   r#   r#   r#   r$   Ú<module>   s0   
