
­­­­­­­­­­­­­­­­­­
<!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 qW qW 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   
