�
�Udac @` s� d d l m Z m Z m Z e Z d d l m Z d d l m Z e
d e
d d d e � d e
d d d e d e � � Z d
Z
d d d d d d
� Z d � Z d � Z d d � Z d � Z d S( i ( t absolute_importt divisiont print_function( t fetch_url( t urlencodet hetzner_usert typet strt requiredt hetzner_passwordt no_logs https://robot-ws.your-server.det GETi
c C` sy | j d | j d <| j d | j d <t | | d | d | d | d | �\ } } y | j � } Wn# t k
r� | j d d � } n X| s� | j d
d j | � � n y� | j | j d � � }
d
|
k r=| r|
d
d | k r|
|
d
d f Sn | j d
d j |
d
d |
d
d |
d
d � � n |
d f SWn* t
k
rt| j d
d j | � � n Xd S( s;
Make general request to Hetzner's JSON robot API.
R t url_usernameR t url_passwordt methodt timeoutt datat headerst bodyt msgs Cannot retrieve content from {0}t utf8t errort codes Request failed: {0} {1} ({2})t statust messages( Cannot decode content retrieved from {0}N( t paramsR t readt AttributeErrort popt Nonet fail_jsont formatt from_jsont decodet
ValueError( t modulet urlR R R R t
accept_errorst respt infot contentt result( ( s@ /usr/lib/python2.7/site-packages/ansible/module_utils/hetzner.pyt fetch_url_json s, -
c C` sW d j t | � } t | | � \ } } d | k rO | j d d j | � � n | d S( s�
Get information record of failover IP.
See https://robot.your-server.de/doc/webservice/en.html#get-failover-failover-ip
s {0}/failover/{1}t failoverR s Cannot interpret result: {0}( R t BASE_URLR* R ( R# t ipR$ R) R ( ( s@ /usr/lib/python2.7/site-packages/ansible/module_utils/hetzner.pyt get_failover_record? s
c C` s t | | � d S( s�
Get current routing target of failover IP.
The value ``None`` represents unrouted.
See https://robot.your-server.de/doc/webservice/en.html#get-failover-failover-ip
t active_server_ip( R. ( R# R- ( ( s@ /usr/lib/python2.7/site-packages/ansible/module_utils/hetzner.pyt get_failoverL s i� c
C` s� d j t | � } | d k rK t | | d d d | d d g �\ } } nX i d d 6} t d | � } t | | d d
d | d t | � d | d d g �\ } } | d k r� | t f S| d
d t f Sd S( sB
Set current routing target of failover IP.
Return a pair ``(value, changed)``. The value ``None`` for ``value`` represents unrouted.
See https://robot.your-server.de/doc/webservice/en.html#post-failover-failover-ip
and https://robot.your-server.de/doc/webservice/en.html#delete-failover-failover-ip
s {0}/failover/{1}R t DELETER R% t FAILOVER_ALREADY_ROUTEDs! application/x-www-form-urlencodeds Content-typeR/ t POSTR R R+ N( R R, R R* t dictR t Falset True( R# R- t valueR R$ R) R R R ( ( s@ /usr/lib/python2.7/site-packages/ansible/module_utils/hetzner.pyt set_failoverW s,
c C` s t d | d | r d n d � S( sh
Create result dictionary for failover IP's value.
The value ``None`` represents unrouted.
R7 t statet routedt unrouted( R4 ( R7 ( ( s@ /usr/lib/python2.7/site-packages/ansible/module_utils/hetzner.pyt get_failover_state} s N( t
__future__R R R R t
__metaclass__t ansible.module_utils.urlsR t+ ansible.module_utils.six.moves.urllib.parseR R4 R6 t HETZNER_DEFAULT_ARGUMENT_SPECR, R R* R. R0 R8 R<