
    Ce                     F   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZ ddlmZ dZ ej        e          Zd Zd Zd Zd	 Zd+d
Z G d d          Z G d d          Z G d de          Z G d de          Z G d d          Zd Zd Z G d d          Z G d de          Z  G d de           Z! G d de          Z" G d d           Z# G d! d"          Z$ G d# d$          Z% G d% d&          Z& G d' d(          Z' G d) d*          Z(dS ),    N   )RGWAMExceptionRGWAMCmdRunException	RGWPeriodRGWUser
RealmToken)	RealmsEPsi@  c                     | rdndS )Ntruefalse )xs    5/usr/lib/python3/dist-packages/ceph/rgw/rgwam_core.pybool_strr      s    #66G#    c                     d                     t          j        t          j        t          j        z   |                     S )N k)joinrandomchoicesstringascii_lowercasedigitsr   s    r   rand_alphanum_lowerr      s-    776>&"86="HANNNOOOr   c                 &    | t          |          z   S N)r   )prefix
suffix_lens     r   gen_namer!       s    '
3333r   c                 2    | r| S |rt          |d          S d S )N   )r!   )valgenr   s      r   
set_or_genr&   $   s,    
 

 #"""4r   c                     | r| S t          j                    }t          }	 d||fz  }|r|                    |          s|S |dz  }&)NThttp://%s:%dr   )socketgetfqdnDEFAULT_PORTendpoint_exists)	endpointsperiodhostnameporteps        r   get_endpointsr2   -   sf     ~HDx.. 	V33B77 	I		r   c                       e Zd Zd ZdS )EnvArgsc                     || _         d S r   )mgr)selfr6   s     r   __init__zEnvArgs.__init__=       r   N)__name__
__module____qualname__r8   r   r   r   r4   r4   <   s#            r   r4   c                       e Zd ZddZd ZdS )	EntityKeyNc                 "    || _         || _        d S r   nameid)r7   rA   rB   s      r   r8   zEntityKey.__init__B   s    	r   c                 &    | sdS | j         | j        fS )NNNr@   )eks    r   	safe_valszEntityKey.safe_valsF   s     	:w~r   rD   )r:   r;   r<   r8   rF   r   r   r   r>   r>   A   s7               r   r>   c                         e Zd Zd fd	Z xZS )
EntityNameNc                 L    t                                          |           d S )N)rA   superr8   )r7   rA   	__class__s     r   r8   zEntityName.__init__M   s$    d#####r   r   r:   r;   r<   r8   __classcell__rL   s   @r   rH   rH   L   s=        $ $ $ $ $ $ $ $ $ $r   rH   c                         e Zd Zd fd	Z xZS )EntityIDNc                 L    t                                          |           d S )N)rB   rJ   )r7   rB   rL   s     r   r8   zEntityID.__init__R   s$    Br   r   rM   rO   s   @r   rQ   rQ   Q   s=                           r   rQ   c            	           e Zd Z	 	 ddedededefdZ	 	 ddedededefdZdefd	ZddefdZddefdZ	ddefdZ
dS )ZoneEnvNenvrealmzgzonec                 >    || _         || _        || _        || _        d S r   rU   rV   rW   rX   r7   rU   rV   rW   rX   s        r   r8   zZoneEnv.__init__W   s"    
			r   c                 N    |r|| _         |r|| _        |r|| _        |r|| _        | S r   rZ   r[   s        r   setzZoneEnv.set^   sC     	DH 	DJ 	DG 	DIr   rE   c                 ~    t                               |          \  }}t          |||          }t          ||          S r   )r>   rF   r&   )r7   rE   r%   r   rA   rB   s         r   _init_entityzZoneEnv._init_entityk   s:    &&r**b$V,,r"""r   Fc                 >    |                      ||d          | _        | S )Nzrealm-)r_   rV   )r7   rV   r%   s      r   
init_realmzZoneEnv.init_realmq   s     &&uc8<<
r   c                 >    |                      ||d          | _        | S )Nzzg-)r_   rW   )r7   rW   r%   s      r   init_zgzZoneEnv.init_zgu   s     ##BU33r   c                 >    |                      ||d          | _        | S )Nzzone-)r_   rX   )r7   rX   r%   s      r   	init_zonezZoneEnv.init_zoney   s     %%dC99	r   NNNNNNN)NF)r:   r;   r<   r4   r>   r8   r]   r_   ra   rc   re   r   r   r   rT   rT   V   s       NR#' G I )      QU" w i I    #y # # # # 	     )     i      r   rT   c                     |r	| ||gz  } d S d S r   r   )paramscmdargs      r   opt_argrl   ~   s&    
 3* r   c                     |r| |gz  } d S d S r   r   )ri   flagrk   s      r   opt_arg_boolro      s$    
 4& r   c                        e Zd ZdefdZd ZdS )
RGWCmdBasezone_envc                 
   |j         | _         | j         j        | _        || _        g | _        |j        r@t          | j        d|j        j                   t          | j        d|j        j                   |j        r@t          | j        d|j        j                   t          | j        d|j        j                   |j	        rBt          | j        d|j	        j                   t          | j        d|j	        j                   d S d S )Nz--rgw-realmz
--realm-id--rgw-zonegroupz--zonegroup-idz
--rgw-zonez	--zone-id)
rU   r6   prog
cmd_suffixrV   rl   rA   rB   rW   rX   )r7   ru   rr   s      r   r8   zRGWCmdBase.__init__   s    <8<	> 	FDO]HN4GHHHDO\8>3DEEE; 	GDO%68HIIIDO%5x{~FFF= 	DDO\8=3EFFFDO[(-2BCCCCC	D 	Dr   c                    || j         z   }| j                            | j        |          \  }}}}t                              dt          |          z             t                              d|z             |dk    rId                    |          }t                              d||||fz             t          || ||          ||fS )Nzcmd=%sz	stdout=%sr    zDERROR: command exited with error status (%d): %s
stdout=%s
stderr=%s)
rv   r6   	tool_execru   logdebugstrr   errorr   )r7   rj   args
returncodestdoutstderrcmd_strs          r   runzRGWCmdBase.run   s    T_$*.(*<*<TY*M*M'Z		(SXX%&&&		+&'''??hhsmmGII^!7FF;< = = =&wVVLLLr   N)r:   r;   r<   rT   r8   r   r   r   r   rq   rq      sC        Dw D D D D         r   rq   c                   $     e Zd Zdef fdZ xZS )RGWAdminCmdrr   c                 L    t                                          d|           d S )Nzradosgw-adminrJ   r7   rr   rL   s     r   r8   zRGWAdminCmd.__init__   s#    (33333r   r:   r;   r<   rT   r8   rN   rO   s   @r   r   r      sD        4 4 4 4 4 4 4 4 4 4 4r   r   c                   *     e Zd Zdef fdZd Z xZS )RGWAdminJSONCmdrr   c                 J    t                                          |           d S r   rJ   r   s     r   r8   zRGWAdminJSONCmd.__init__   s!    """""r   c                 f    t                               | |          \  }}t          j        |          S r   )r   r   jsonloads)r7   rj   r   _s       r   r   zRGWAdminJSONCmd.run   s)    OOD#..	z&!!!r   )r:   r;   r<   rT   r8   r   rN   rO   s   @r   r   r      sS        # # # # # # #" " " " " " "r   r   c                   $     e Zd Zdef fdZ xZS )RGWCmdrr   c                 L    t                                          d|           d S )NradosgwrJ   r   s     r   r8   zRGWCmd.__init__   s#    H-----r   r   rO   s   @r   r   r      sD        . . . . . . . . . . .r   r   c                   B    e Zd ZdefdZd Zd	defdZd	defdZd Z	dS )
RealmOprU   c                     || _         d S r   rU   r7   rU   s     r   r8   zRealmOp.__init__   r9   r   c                    	 t          | j                  }ddg}t          |                              |          }|                    d          pg S # t
          $ r(}t          j        d|j                    g cY d }~S d }~ww xY w)NrV   listrealmszException while listing realms 	rT   rU   r   r   getr   logginginfomessager7   zeri   outputes        r   r   zRealmOp.list   s    	""Bv&F$R((,,V44F::h''-2- 	 	 	LF19FFGGGIIIIII	   AA 
BB :B BNrV   c                 z    t          | j        |          }ddg}t          |                              |          S )NrV   rV   r   rT   rU   r   r   r7   rV   r   ri   s       r   r   zRealmOp.get   s<    TXU+++5!r""&&v...r   c                     t          | j                                      |d          }ddg}t          |                              |          S )NT)rV   r%   rV   create)rT   rU   ra   r   r   r   s       r   r   zRealmOp.create   sJ    TX))4)@@8$r""&&v...r   c                     ddd|d|d|g}t          | j        |          }t          |                              |          S )NrV   pullz--url--access-key--secretr   r   )r7   rV   url
access_keysecretri   r   s          r   r   zRealmOp.pull   sP    3 *f	&
 TXU+++r""&&v...r   r   )
r:   r;   r<   r4   r8   r   r>   r   r   r   r   r   r   r   r      s        G    	 	 	/ / / / / /
/ /I / / / /
/ / / / /r   r   c                   R    e Zd ZdefdZd ZddefdZdded	efd
Zdded	efdZ	dS )ZonegroupOprU   c                     || _         d S r   r   r   s     r   r8   zZonegroupOp.__init__   r9   r   c                    	 t          | j                  }ddg}t          |                              |          }|                    d          pg S # t
          $ r(}t          j        d|j                    g cY d }~S d }~ww xY w)N	zonegroupr   
zonegroupsz#Exception while listing zonegroups r   r   s        r   r   zZonegroupOp.list   s    	""B!6*F$R((,,V44F::l++1r1 	 	 	LJqyJJKKKIIIIII	r   Nr   c                     t          | j                  }ddg}t          |d|           t          |                              |          S )Nr   r   rt   rT   rU   rl   r   r   )r7   r   r   ri   s       r   r   zZonegroupOp.get   sJ    TXu%)9555r""&&v...r   TrV   rW   c                    t          | j        |                              |d          }ddg}t          |d|           t	          |d|           t          |                              |          \  }}t          j        |          S )Nr   Tr%   r   r   --master--endpoints)	rT   rU   rc   ro   rl   r   r   r   r   )	r7   rV   rW   r-   	is_masterr   ri   r   r   s	            r   r   zZonegroupOp.create   s    TXU+++33BD3AA 	VZ333y111OO''//	z&!!!r   c                     t          | j        ||          }ddg}t          |d|           t          |                              |          S )NrV   rW   r   modifyr   r   )r7   rV   rW   r-   r   ri   s         r   r   zZonegroupOp.modify   sP    TXUr222x(y111r""&&v...r   r   )NNT
r:   r;   r<   r4   r8   r   r>   r   r   r   r   r   r   r   r      s        G      / /Y / / / /" "I "9 " " " "/ /I /9 / / / / / /r   r   c                   ^    e Zd ZdefdZd ZdefdZ	 	 	 dded	edefd
Z	 	 ddedefdZ	dS )ZoneOprU   c                     || _         d S r   r   r   s     r   r8   zZoneOp.__init__  r9   r   c                    	 t          | j                  }ddg}t          |                              |          }|                    d          pg S # t
          $ r(}t          j        d|j                    g cY d }~S d }~ww xY w)NrX   r   zoneszException while listing zones r   r   s        r   r   zZoneOp.list  s    	""Bf%F$R((,,V44F::g&&,", 	 	 	LE!)EEFFFIIIIII	r   rX   c                 z    t          | j        |          }ddg}t          |                              |          S )NrX   rX   r   r   )r7   rX   r   ri   s       r   r   z
ZoneOp.get  sA    TXD))) r""&&v...r   NTrV   r   c                 .   t          | j        ||                              |d          }ddg}	t          |	d|           t	          |	d|           t	          |	d|           t	          |	d	|           t          |                              |	          S )
Nr   Tr   rX   r   r   r   r   r   )rT   rU   re   ro   rl   r   r   )
r7   rV   r   rX   r-   r   r   r   r   ri   s
             r   r   zZoneOp.create  s     TXUy999CCDdCSS 	VZ333
333
F+++y111r""&&v...r   rW   c                    t          | j        ||          }ddg}t          |d|           t          |d|           t          |d|           t          |d|           t	          |                              |          S )NrX   rW   rX   r   r   r   r   r   )rT   rU   ro   rl   r   r   )	r7   rX   rW   r   r   r   r-   r   ri   s	            r   r   zZoneOp.modify-  s    TXDR000 	VZ333
333
F+++y111r""&&v...r   )NNTNNrg   r   r   r   r   r   r     s        G      /	 / / / / PT)-'+/ /I /) /9 / / / /  @D7;/ /9 /) / / / / / /r   r   c                   H    e Zd Zd ZddededefdZddZdd	Zd
 ZddZ	dS )PeriodOpc                     || _         d S r   r   r   s     r   r8   zPeriodOp.__init__=  r9   r   TrV   r   rX   c                 Z   |                      ||          }|rt          |d                   n|}|                     |          }|rt          |d                   n|}t          | j        |||          }	ddg}
t          |
d|           t          |	                              |
          S )NrA   )rV   rW   rX   r.   updatez--commit)get_master_zonerH   get_master_zonegrouprT   rU   ro   r   r   )r7   rV   r   rX   commitmaster_zone_infomaster_zonemaster_zonegroup_infomaster_zonegroupr   ri   s              r   r   zPeriodOp.update@  s    //yAA>NXj!1&!9:::TX $ 9 9% @ @$4:&;F&CDDD*3 	TXU0@{SSSH%VZ000r""&&v...r   Nc                     	 t          | j        ||          }ddg}t          |                              |          S # t          $ r Y d S w xY w)Nr   rX   r   rT   rU   r   r   r   )r7   rV   r   r   ri   s        r   r   zPeriodOp.get_master_zoneK  sd    	9===Be_F"2&&**6222# 	 	 	44	s   <? 
AAc                 D   	 t          | j        ||          }ddg}t          |                              |          }|d         d         D ]A}t	          |d                   s|d         D ] }|d         |d	         k    r|d
         c c S !Bd S # t
          $ r Y d S w xY w)Nr   r.   r   
period_mapr   r   r   rB   r   r-   )rT   rU   r   r   boolr   )r7   rV   r   r   ri   r   rW   rX   s           r   get_master_zone_epzPeriodOp.get_master_zone_epS  s    	9===B&F$R((,,V44F\*<8 1 1B{O,, wK 1 1DDzR%666#K000000 71 4# 	 	 	44	s   B
B B 
BBc                     	 t          | j        |          }ddg}t          |                              |          S # t          $ r Y d S w xY w)Nr   r   r   r   r   s       r   r   zPeriodOp.get_master_zonegroupb  sc    	///B!5)F"2&&**6222# 	 	 	44	s   ;> 
AAc                 z    t          | j        |          }ddg}t          |                              |          S )Nr   r.   r   r   r   s       r   r   zPeriodOp.getj  s<    TXU+++E"r""&&v...r   Tr   )
r:   r;   r<   r8   r>   r   r   r   r   r   r   r   r   r   r   <  s          	/ 	/I 	/) 	/9 	/ 	/ 	/ 	/        / / / / / /r   r   c                   `    e Zd Zd Z	 	 d
dedefdZddedefdZddedefdZddedefd	ZdS )UserOpc                     || _         d S r   r   r   s     r   r8   zUserOp.__init__q  r9   r   NFrX   rW   c                     t          | j        ||          }|pt          |pdd          }	|p|	}
ddd|	d|
g}t          |d|           t	          |d	|           t          |                              |          S )
Nr   zuser-   userr   --uidz--display-namez--emailz--system)rT   rU   r!   rl   ro   r   r   )r7   rX   rW   uid
uid_prefixdisplay_nameemail	is_systemr   udnri   s               r   r   zUserOp.createt  s    TXDR00058J1'155Q1"B(
 		5)))VZ333r""&&v...r   c                     t          | j        ||          }ddg}t          |d|           t          |d|           t          |                              |          S )Nr   r   r   r   r   r   r7   rX   rW   r   r   r   ri   s          r   r   zUserOp.info  sg    TXDR000 	%%%
333r""&&v...r   c                     t          | j        ||          }ddg}t          |d|           t          |d|           t          |                              |          S )Nr   r   rmr   r   rT   rU   rl   r   r   r   s          r   r   z	UserOp.rm  se    TXDR000 	%%%
3332""6***r   c                     t          | j        ||          }ddg}t          |d|           t          |                              |          S )Nr   keyremover   r   )r7   rX   rW   r   r   ri   s         r   rm_keyzUserOp.rm_key  sS    TXDR000 	
3332""6***r   )NNNNFrD   r   )	r:   r;   r<   r8   r>   r   r   r   r   r   r   r   r   r   p  s           ^b%*/ /9 /) / / / /$	/ 	/ 	/	 	/ 	/ 	/ 	/	+ 	+y 	+i 	+ 	+ 	+ 	++ +9 +) + + + + + +r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
dd
Z	 	 ddZd ZddZddZddZd Zd Zd Zd Zd ZddZddZddZddZd	S ) RGWAMc                     || _         d S r   r   r   s     r   r8   zRGWAM.__init__  r9   r   c                 *    t          | j                  S r   )r   rU   r7   s    r   realm_opzRGWAM.realm_op  s    tx   r   c                 *    t          | j                  S r   )r   rU   r   s    r   	period_opzRGWAM.period_op  s    !!!r   c                 *    t          | j                  S r   )r   rU   r   s    r   zonegroup_opzRGWAM.zonegroup_op  s    48$$$r   c                 *    t          | j                  S r   )r   rU   r   s    r   zone_opzRGWAM.zone_op      dhr   c                 *    t          | j                  S r   )r   rU   r   s    r   user_opzRGWAM.user_op  r  r   c                     	 |                                                      t          |                    }t          |d         |d                   }|S # t          $ r d w xY w)NrA   rB   )r   r   rH   r>   r   )r7   
realm_name
realm_inforV   s       r   	get_realmzRGWAM.get_realm  sh    	,,Z
-C-CDDJj0*T2BCCEL 	 	 	J	s   AA A!c                 4   	 |                                                      t          |                    }t          |d         |d                   }t	          j        d|j         d|j                    |S # t          $ r}t          d|          d }~ww xY w)NrA   rB   zCreated realm name= id=zfailed to create realm)	r   r   rH   r>   r   r   rA   rB   r   )r7   r
  r  rV   r   s        r   create_realmzRGWAM.create_realm  s    	>//
:0F0FGGJj0*T2BCCELIuzIIuxIIJJJL 	> 	> 	> !91===	>s   A5A8 8
BBBNc                 <   	 |                                                      |t          |          ||          }t          |d         |d                   }t	          j        d|j         d|j                    |S # t          $ r}t          d|          d }~ww xY w)N)r   rA   rB   zCreated zonegroup name=r  zfailed to create zonegroup)	r  r   rH   r>   r   r   rA   rB   r   )r7   rV   zonegroup_namezonegroup_is_masterr-   zg_infor   r   s           r   create_zonegroupzRGWAM.create_zonegroup  s    		B''))001;N1K1K1:;N 1 P PG "'&/74=AAILU9>UUy|UUVVV 	B 	B 	B !=qAAA	Bs   A9A< <
BBBc           	      B   	 |                                                      ||t          |          ||||          }t          |d         |d                   }	t	          j        d|	j         d|	j                    |	S # t          $ r}
t          d|
          d }
~
ww xY w)N)r   r   r   rA   rB   zCreated zone name=r  zfailed to create zone)	r  r   rH   r>   r   r   rA   rB   r   )r7   rV   rW   	zone_namezone_is_masterr   r   r-   	zone_inforX   r   s              r   create_zonezRGWAM.create_zone  s    	=--eR.8.C.C.78F9C5; . = =I Yv.	$@@DLFdiFFTWFFGGGK 	= 	= 	= !8!<<<	=s   A<A? ?
B	BBc                    	 |                                                      ||d|j         dd          }t          |          }t	          j        d|j         d           |S # t          $ r}t          d|          d }~ww xY w)Nzsysuser-user-sysTr   r   r   zCreated system user: z, on{realm.name}/{zonegroup.name}/{zone.name}failed to create system user)r  r   rA   r   r   r   r   r   )r7   rV   r   rX   sys_user_infosys_userr   s          r   create_system_userzRGWAM.create_system_user  s    	D LLNN11$2;6M6M6M=G<@	 2 B BM
 }--HL E E E E F F FO 	D 	D 	D !?CCC	Ds   A!A$ $
B.A>>Bc                     	 |                                                      |||d          }t          |          }t          j        d           |S # t
          $ r}t          d|          d }~ww xY w)NF)r   r   zKCreated regular user {user.uid} on{realm.name}/{zonegroup.name}/{zone.name}zfailed to create user)r  r   r   r   r   r   )r7   rW   rX   r   	user_infor   r   s          r   create_normal_userzRGWAM.create_normal_user  s    	=--dBC5-QQI9%%DL E F F FK 	= 	= 	= !8!<<<	=s   AA 
A1A,,A1c                     	 |                                                      |||d          }t          |          }t          j        d|j        z              d S # t          $ r}t          d|          d }~ww xY w)NT)r   Period: failed to update period)r  r   r   r   r   rB   r   r   )r7   rV   rW   rX   period_infor.   r   s          r   update_periodzRGWAM.update_period  s    	?..**11%T$1OOK{++FLfi/00000# 	? 	? 	? !:A>>>	?s   AA 
A9$A44A9Tc                    |j         }|j        }|j        }||                                                                 v rt          d| d          ||                                                                 v rt          d| d          ||                                                                 v rt          d| d          |                     |          }| 	                    ||d          }| 
                    |||d          }|                     ||           |                     |||          }	|	                    d          }
|
r|
j        nd	}|
r|
j        nd	}|                                                     ||d |||j        
           |                     ||           |r|j        t%          ||j        d ||          }|                                                    d          }t-          j        |                              d          }||_        d|_        | j        j                            |           d S d S d S )NzRealm  already existsz
Zonegroup Zone T)r  )r  r   r   r-   utf-8)	rgw_realmrgw_zonegrouprgw_zoner   r   r   r  r  r  r  r  r(  r   get_keyr   
secret_keyr   zone_endpointsr   rB   to_jsonencodebase64	b64encodedecodergw_realm_tokenupdate_endpointsrU   r6   	apply_rgw)r7   rgw_specstart_radosgwr
  r  r  rV   r   rX   r  rgw_acces_keyr   r   realm_tokenrealm_token_brealm_token_ss                   r   realm_bootstrapzRGWAM.realm_bootstrap  sx   '
!/%	 --//// !E*!E!E!EFFFT..00557777 !Mn!M!M!MNNN++---- !C!C!C!CDDD !!*--))%UY)ZZ	y)DQQ5),,, **5)TBB ((++1>F]--B
-:B))dIt(&H<S 	 	U 	U 	U5),,, 	-X4< %Z%*X%)%/9 9K (//1188AAM",];;BB7KKM'4H$(,H%HL""8,,,,,	- 	-<<r   c                    	 |                                                      t          |                    }n"# t          $ r}t          d|          d }~ww xY wt	          |          }t          |j                  }t          |j                  }	 |                                                     |          }	n"# t          $ r}t          d|          d }~ww xY w|	d         }
t          j
        d|j        z              t          j
        d|j        z              |j        |
k    rt          j         ddfS d}|s!|                    |j        |j                  }n|                    d	          }t!          |          d
k    r|d
         }	 |                                                     |||dd          }n"# t          $ r}t          d|          d }~ww xY wt'          |          }t          j
        d|j        z             d}d}t!          |j                  d
k    r$|j        d
         j        }|j        d
         j        }t1          ||j        |||          }t          j
        |                                           |                                                    d          }d
dt9          j        |                              d          z  dfS )Nfailed to fetch period infor   failed to access master zonerB   r%  Master zone: r   #Command needs to run on master zone,r   r  Tr  r  zCreated system user: %sr-  zRealm Token: %s)r  r   rH   r   r   rQ   r   r   r  r   r   rB   errnoEINVALget_zone_endpointssplitlenr  r   r   r   keysr   r2  r   realm_idr4  r5  r6  r7  r8  )r7   r
  r-   sys_uidr'  r   r.   	master_zgr   r  zone_idr1   epsr  r  sys_access_key
sys_secretr?  r@  s                      r   realm_new_zone_credszRGWAM.realm_new_zone_creds1  s   	C..**..z*/E/EFFKK 	C 	C 	C !>BBB	C ;''V455	v122	D***<<II 	D 	D 	D !?CCC	D D/Z&)+,,,_v'99:::((\M2'LMM 	'++F,CVEWXXCC//#&&Cs88a<<QB	D LLNN11+yg=GSW 2 Y YMM 	D 	D 	D !?CCC	D =)).=>>>
x}!!%]1-8N!q)4J V_b.R\]][((**+++#++--44W==$v'7'F'F'M'Mg'V'VVXZ[[sE   47 
AAA(B: :
CCC,F: :
GGGc                    |st          d          t          j        |          }	 |                                                     t          |j                            }n"# t           $ r}t          d|          d }~ww xY wt          |          }t          |j                  }t          |j	                  }t          j        d|j        z              t          j        d|j	        z              	 |                                                     |          }n"# t           $ r}t          d|          d }~ww xY w|j	        |d         k    rt          j         dd	fS |j        }		 |                                                     |||	
          }
n"# t           $ r}t          d|          d }~ww xY wt%          |
          }d}|j        D ]}|j        |	k    rd} nd}|rg	 |                                                     |||j                   n+# t           $ r}t          d|z   |j        |          d }~ww xY wd|j        z   }nr	 |                                                     |||	
           n3# t           $ r&}t          d|	z   dz   |j        z   dz   |          d }~ww xY wd|	z   dz   |j        z   dz   }d|dfS )Nmissing realm tokenrD  r%  rF  r   rE  rB   r   rG  )r   z)failed to get the system user informationTF)r   zfailed removing user zRemoved uid zfailed removing access key z(uid = )zRemoved access key r   )r   r   from_base64_strr  r   rQ   rO  r   r   r   r   r   rB   r  rI  rJ  r   r  r   rN  r   r   r   )r7   realm_token_b64r?  r'  r   r.   rQ  r   r  r   r"  r   only_keyr   success_messages                  r   realm_rm_zone_credszRGWAM.realm_rm_zone_credsj  sV    	8 !6777 0AA	C..**..x8L/M/MNNKK 	C 	C 	C !>BBB	C ;''V455	v122Z&)+,,,_v'99:::	D***<<II 	D 	D 	D !?CCC	D 400\M2'LMM +
	Q++Kz+ZZII 	Q 	Q 	Q !LaPPP	Q y!! 	 	A|z))  *  	^R!!+ydh!GGGG! R R R$%<t%CTXqQQQR -tx7OOQ%%k9%TTTT! Q Q Q$%B%/&02;&<>Bh&GIL&MNOQ Q QQ 4j@9LtxWZ]]O?B''sw   9A! !
B +A;;B 3(D 
D;&D66D;'*F 
F1F,,F1#/H 
H;H66H;
*I5 5
J%?!J  J%c           	      ,   |st          d          |t          d          t          j        |          }|j        }|j        }|j        }|j        }	t          j        d| d|	            t          |	          }
| 
                                                    |
          }t          |          }t          j        d|j        z              |                    |          }|st          d| d          t          |j                  }t          |          }| 
                                                    |
|          }d| d| d| }t          j        |           	 |                                                     ||||d	                    |          
           ||d         k    r=|                                                     |
|d	                    |                     n"# t           $ r}t          d|          d }~ww xY w	 | 
                                                    |
||d          }n"# t           $ r}t          d|          d }~ww xY wt          |          }t          j        |                                           d|dfS )Nzmissing realm access config"Zone name is a mandatory parameterzUsing realm rx   r%  z
zonegroup z
 not foundzModified zone rH  )r   r   r-   rA   r,  failed to modify zoneTr&  r   r   )r   r   rZ  r   r   r
  rO  r   r   rQ   r  r   r   rB   find_zonegroup_by_namerH   rA   r   r  r   r   r  r   r{   r4  )r7   r
  r  r  r-   r[  r?  r   r   rO  rV   r'  r.   r   rW   rX   r   r]  r   s                      r   zone_modifyzRGWAM.zone_modify  s    	@ !>??? !EFFF 0AA +
# +
';J;;;;<<<""nn&&**511;''Z&)+,,,11.AA	 	J !Hn!H!H!HIII	'')$$>>++;;E2FFT:TTTTTT_%%%	=LLNN!!$z)/388I;N;N " P P P ,V444!!##**5"@S@S*TTT 	= 	= 	= !8!<<<	=	?..**11%T4HHKK 	? 	? 	? !:A>>>	? ;''fnn&&'''?B''s1   #BG, ,
H6HH*H: :
IIIc           
         g }|                                                                  D ]}|                     |          }|                                                     |          }|                                                     |          }|r!d|v r|d         d         }|d         d         }nd}d}|                    ||j        |r|d         nd|r|d         nd ||d           |S )N
system_keyr   r2  r   rB   r   )r
  rO  master_zone_idendpointr   r   )r   r   r  r  r   r   appendrB   )r7   realms_infor
  rV   master_zone_infzone_epr   r   s           r   get_realms_infozRGWAM.get_realms_info  s   --//..00 	3 	3JNN:..E"nn..>>uEEOnn&&99%@@G <?#B#B,\:<H
(6|D
j,1HKZ2b/$2G2G`b:A,KGAJJt.8*0 2  2 3 3 3 3 r   c           	         |j         st          d          |j        t          d          |j        |                                                                 v rt          d|j         d          t          j        |j                   }|j        t          d          |j        }|j	        }	 | 
                                                    t          |j                  |j        ||          }n"# t          $ r}t          d|          d }~ww xY wt          j        d|d          d	|d
          d           |d         }|d
         }	t!          |	          }
|                                                     |
          }t'          |          }t          j        d|j        z              |                                }|st          d          |                     |
||j        d|||j                  }|                     |
||           t'          |          }t          j        |                                           |r|j        t          ||	d |j        |j	                  }|                                                    d          }t9          j        |                              d          }d|_        ||_         |j!        |_"        | j#        j$        %                    |           d S d S d S )NrX  r`  r+  r*  z$Provided realm token has no endpointzfailed to pull realmzPulled realm rA   z (rB   rY  r%  z2Cannot find master zonegroup of realm {realm_name}Fr,  r-  T)&r9  r   r0  r  r   r   rZ  rg  r   r   r   r   rH   r
  r   r   rQ   r  r   r   rB   r   r  r-   r(  r{   r4  r5  r6  r7  r8  r:  	rgw_tokenrA   r/  rU   r6   r;  )r7   r<  r=  r?  r   r   r  r   r
  rO  rV   r'  r.   r   rX   secondary_realm_tokenr@  rA  s                     r   zone_createzRGWAM.zone_create  s   ' 	8 !6777$ !EFFF 3 3 5 555 !K):!K!K!KLLL 01IJJ' !GHHH +
#	<--j9O.P.P.9.BJPVX XJJ 	< 	< 	< !7;;;	< 	NZ%7NN:d;KNNNOOO'
d#""nn&&**511;''Z&)+,,,//11	 	W !UVVVy(2C % *Fh>P   R R 	5)T222;''fnn&&''' 	-X/7$.z/7/3/:/E/:/A	%C %C!
 299;;BB7KKM",];;BB7KKM(,H%!.H%.^H"HL""8,,,,,	- 	-77s   0AC2 2
D<DDc                 f   d }|r
|rd|d|}d}d }d }d}| j         j                            |||||          }	t                      }
|	D ]}|j        D ]}|                                }|                    d          }t          |          dk     rt          	                    d|z             \|d         }|d	         }|r$||k    rt          
                    d
|z             |r$||k    rt          
                    d|z             d|j        |fz  }|
                    |||           ܌|
S )Nzrgw..rgwT)	daemon_idhostrefresh   z/ERROR: service id cannot be parsed: (svc_id=%s)r   r   skipping realm %sskipping zone %sr(   )rU   r6   list_daemonsr	   ports
service_idrL  rM  rz   r}   r{   r/   add)r7   r
  r  r  service_namedaemon_typert  r/   rv  daemonsrepspsvc_idsp	svc_realmsvc_zoner1   s                     r   _get_daemon_epszRGWAM._get_daemon_eps"  s    	A) 	A 	A*4**ii@L	(,++L,76?194;	 , = = kk 	1 	1AW 1 1\\#&&r77Q;;IIORXXYYYqE	a5 )z"9"9II1I=>>> Y!6!6II08;<<<#qz1o5	8R0000)1, 
r   c           	         t                      }	 |                                                                 }n"# t          $ r}t          d|          d }~ww xY wi }|D ]o}|r$||k    rt                              d|z             )|                                                     t          |                    }	t          |	          }
i ||<   |

                                D ]}|r.|j        |k    r#t                              d|j        z             2|                                D ]}|r.|j        |k    r#t                              d|j        z             2|j        ||         |j        <   t          |j                  dk    r|                    ||j        d            ||j        D ]}|                    ||j        |           q||fS )Nzfailed to list realmsrx  zskipping zonegroup %sry  r   )r	   r   r   r   rz   r{   r  r   rH   r   iter_zonegroupsrA   
iter_zonesrM  r-   r}  )r7   r
  r  r  r  r   r   	zones_maprV   r'  r.   rW   rX   r1   s                 r   _get_rgw_epszRGWAM._get_rgw_epsN  s   kk	=]]__))++FF 	= 	= 	= !8!<<<	= 	 	6 	6E ez11		-5666..**..z%/@/@AAK{++F!Ie,,.. 6 6! bg&?&?II5?@@@MMOO 6 6D  !TY)%;%;		"4ty"@AAA 24'Ie$TY/4>**a//ty$777 "n 6 6ty"5555666& Ys   &7 
AAAFc           
      P   |                      |||          }|                     |||          \  }}|                    |          }t          j        |          }	|sd|	dfS |                                D ](\  }
}|                                D ]\  }}||
         |         }	 |                                                     t          |          t          |          d	                    ||
         |                              x# t          $ r}t          d|          d }~ww xY w	 |                                                     t          |
          t          |          t          |          d           # t          $ r}t          d|          d }~ww xY wdd|	z   dfS )	Nr   r   rH  r,  ra  Tr&  z	Updated: )r  r  diffr   dumpsitemsr  r   rH   r   r   r  r   )r7   r
  r  r  r   
daemon_reprgw_repr  r  diffjrV   
realm_diffrX   r-   rW   r   s                   r   realm_reconcilezRGWAM.realm_reconcilew  s   ))*niPP
!..z>9UUw''
4   	"ub>!!% 	C 	CE:#-#3#3#5#5 E Eiu%d+ELLNN))*T*:*:JrNN47HHT%[=N4O4O * Q Q Q Q% E E E()@!DDDEC  ''
5(9(9:b>>:VZK[K[]abbbb! C C C$%>BBBC ;&++s2   $A#D
D'D""D'+AE>>
FFFc                     d}|r|d|z  z  }d|g}|r|d|gz  }|r|d|gz  }|r|d|gz  }t          | j                                      |          \  }}}	|||	fS )Nbeastz port=%sz--rgw-frontendsz
--log-filez
--debug-msz--debug-rgw)r   rU   r   )
r7   r0   log_filedebug_ms	debug_rgwfe_cfgri   retcoder   r   s
             r   run_radosgwzRGWAM.run_radosgw  s     	(j4''F#V, 	/|X..F 	/|X..F 	1}i00F$*48$4$4$8$8$@$@!&&((r   r   rf   r   )NNNFrg   )r:   r;   r<   r8   r   r  r  r  r  r  r  r  r  r   r#  r(  rB  rV  r^  rc  rl  rp  r  r  r  r  r   r   r   r   r     s         ! ! !" " "% % %            > > >
B 
B 
B 
B LP+/= = = = D D D= = = =? ? ? ?(- (- (- (-T7\ 7\ 7\r;( ;( ;(z.( .( .(`  (5- 5- 5-n* * * *X'  '  '  ' R, , , ,>) ) ) ) ) )r   r   r   ))r   r   r   r)   r6  r   rI  typesr   r   r   r   r   r  r	   r+   	getLoggerr:   rz   r   r   r!   r&   r2   r4   r>   rH   rQ   rT   rl   ro   rq   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     s          W W W W W W W W W W W W W W      g!!$ $ $P P P4 4 4            
       $ $ $ $ $ $ $ $
         y      
% % % % % % % %P  
  
               @4 4 4 4 4* 4 4 4
" " " " "k " " ". . . . .Z . . .
 /  /  /  /  /  /  /  /F%/ %/ %/ %/ %/ %/ %/ %/P2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/j1/ 1/ 1/ 1/ 1/ 1/ 1/ 1/h4+ 4+ 4+ 4+ 4+ 4+ 4+ 4+nB) B) B) B) B) B) B) B) B) B)r   