
    VhO$                         d dl mZmZmZ eZdZdZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d Z G d d	e      Zd
 Zedk(  r e        yy)    )absolute_importdivisionprint_functiona$  
module: svc
author:
  - Brian Coca (@bcoca)
short_description: Manage C(daemontools) services
description:
  - Controls C(daemontools) services on remote hosts using the C(svc) utility.
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  name:
    description:
      - Name of the service to manage.
    type: str
    required: true
  state:
    description:
      - V(started)/V(stopped) are idempotent actions that will not run commands unless necessary.
      - V(restarted) will always bounce the svc (svc -t) and V(killed) will always bounce the svc (svc -k).
      - V(reloaded) will send a sigusr1 (svc -1).
      - V(once) will run a normally downed svc once (svc -o), not really an idempotent operation.
    type: str
    choices: [killed, once, reloaded, restarted, started, stopped]
  downed:
    description:
      - Should a C(down) file exist or not, if it exists it disables auto startup. Defaults to V(false). Downed does not imply
        stopped.
    type: bool
  enabled:
    description:
      - Whether the service is enabled or not, if disabled it also implies O(state=stopped). Take note that a service can
        be enabled and downed (no auto restart).
    type: bool
  service_dir:
    description:
      - Directory C(svscan) watches for services.
    type: str
    default: /service
  service_src:
    description:
      - Directory where services are defined, the source of symlinks to O(service_dir).
    type: str
    default: /etc/service
a  
- name: Start svc dnscache, if not running
  community.general.svc:
    name: dnscache
    state: started

- name: Stop svc dnscache, if running
  community.general.svc:
    name: dnscache
    state: stopped

- name: Kill svc dnscache, in all cases
  community.general.svc:
    name: dnscache
    state: killed

- name: Restart svc dnscache, in all cases
  community.general.svc:
    name: dnscache
    state: restarted

- name: Reload svc dnscache, in all cases
  community.general.svc:
    name: dnscache
    state: reloaded

- name: Using alternative svc directory location
  community.general.svc:
    name: dnscache
    state: reloaded
    service_dir: /var/service
N)AnsibleModule)	to_nativec                     d}|d   j                   d   }|4| j                         D ]!  }|j                  |j                  |k(  s |}# || }t        | |  |      S )z-
    Used for derivative implementations
    Nmoduledistro)params__subclasses__r
   super__new__)clsargskwargssubclassr
   scs         i/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/svc.py_load_dist_subclassr   f   sw     HH$$X.F $$& 	Byy$f)<	 h'11    c                   ^    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)Svcz
    Main class that handles daemontools, can be subclassed and overridden in case
    we want to use a 'derivative' like encore, s6, etc
    c                    ddg| _         g d| _        || _        |j                  d   | _        |j                  d   | _        |j                  d   | _        d | _        d | _        d | _	        d | _
        d | _        d | _        |j                  d| j                         | _        |j                  d	| j                         | _        d
j!                  | j
                  | j                  g      | _        d
j!                  | j                  | j                  g      | _        t&        j(                  j+                  | j"                        | _        | j                  rBt&        j(                  j+                  d| j"                  z        | _        | j-                          y t&        j(                  j+                  d| j$                  z        | _        d| _
        y )Nz/commandz/usr/local/bin)stateenableddownedsvc_fullsrc_fullpidduration
full_statenameservice_dirservice_srcsvc)opt_dirssvstat/%s/downstopped)extra_pathsreport_varsr	   r   r"   r#   r$   r   r   r!   r   r   r    get_bin_pathsvc_cmd
svstat_cmdjoinr   r   ospathlexists
get_status)selfr	   s     r   __init__zSvc.__init__   s]   &(89rMM&)	!==7!==7
**54;K;K*L --hAQAQ-R$"2"2DII!>?$"2"2DII!>?wwt}}5<<''//)dmm*CDDKOO''//)dmm*CDDK"DJr   c                    t         j                  j                  | j                        r,	 t        j                  | j                  | j
                         y | j                  j                  d| j                  z         y # t        $ r=}| j                  j                  | j                  dt        |      z         Y d }~y d }~ww xY w)NzError while linking: %sr2   msgz1Could not find source for service to enable (%s).r9   )
r1   r2   existsr   symlinkr   OSErrorr	   	fail_jsonr   )r5   es     r   enablez
Svc.enable   s    77>>$--(h

4==$--8 KK!!&Y\`\i\i&i!j  h%%4==>WZcdeZf>f%gghs   *B   	C	3CCc                    	 t        j                  | j                         | j                  | j                  d| j                  g       d| j                  z  }t         j                  j                  |      r| j                  | j                  d|g       y y # t        $ r=}| j                  j                  | j                  dt        |      z         Y d }~d }~ww xY w)NzError while unlinking: %sr8   z-dxz%s/log)r1   unlinkr   r=   r	   r>   r   execute_commandr.   r   r2   r;   )r5   r?   src_logs      r   disablezSvc.disable   s    	fIIdmm$ 	dllE4==ABT]]*77>>'"  $,,w!?@ #  	fKK!!t}}:UXabcXd:d!ee	fs   B 	C 3CCc                 P   | j                  | j                  | j                  g      \  }}}||r|x| _        | _        y || _        t        j                  d|      }|r|j                  d      | _        t        j                  d|      }|r|j                  d      | _	        t        j                  d|      rd| _        n&t        j                  d|      rd| _        nd| _        y t        j                  d	|      r| xj                  d
z  c_        y | xj                  dz  c_        y )Nz\(pid (\d+)\)   z(\d+) secondsz up startz down stoppunknownz want inged)
rC   r/   r   r!   r   researchgroupr   r    )r5   rcouterrms        r   r4   zSvc.get_status   s    ++T__dmm,LMC?s+..DOdj!DO		*C0A771:		*C0A !
yy%$
8S)$
&
yy3'

e#


d"
r   c                 R    | j                  | j                  d| j                  g      S )Nz-urC   r.   r   r5   s    r   rH   z	Svc.start   "    ##T\\4$GHHr   c                 "    | j                         S N)stoprV   s    r   rI   z	Svc.stopp   s    yy{r   c                 R    | j                  | j                  d| j                  g      S )Nz-drU   rV   s    r   rZ   zSvc.stop   rW   r   c                 R    | j                  | j                  d| j                  g      S )Nz-orU   rV   s    r   oncezSvc.once   rW   r   c                 R    | j                  | j                  d| j                  g      S )Nz-1rU   rV   s    r   reloadz
Svc.reload   rW   r   c                 R    | j                  | j                  d| j                  g      S )Nz-trU   rV   s    r   restartzSvc.restart   rW   r   c                 R    | j                  | j                  d| j                  g      S )Nz-krU   rV   s    r   killzSvc.kill   rW   r   c                     	 | j                   j                  |      \  }}}fS # t        $ rE}| j                   j                  dt	        |      z  t        j                                Y d }~Nd }~ww xY w)Nzfailed to execute: %s)r9   	exception)r	   run_command	Exceptionr>   r   	traceback
format_exc)r5   cmdrP   rQ   rR   r?   s         r   rC   zSvc.execute_command   sr    	p;;2237LBS C~  	pKK!!&=	!&LXaXlXlXn!oo	ps   & 	A4;A//A4c                 p    | j                          i }| j                  D ]  }| j                  |   ||<    |S rY   )r4   r,   __dict__)r5   statesks      r   reportz
Svc.report   s=    !! 	)Aa(F1I	)r   N)__name__
__module____qualname____doc__r6   r@   rE   r4   rH   rI   rZ   r]   r_   ra   rc   rC   ro    r   r   r   r   y   sP    #:k	A#:IIIIIIr   r   c                  T   t        t        t        dd      t        dg d      t        d      t        d      t        dd	      t        dd
	            d      } t        dddd      | _        | j                  d   }| j                  d   }| j                  d   }t	        |       }d}|j                         }|A||j                  k7  r2d}| j                  s$	 |r|j                          n|j                          |1||j                  k7  r"d}| j                  s t        ||d d               |_||j                   k7  rPd}| j                  sBd|j"                  z  }	 |rt%        |d      j'                          nt)        j*                  |       | j-                  ||j                                y # t        t        f$ r(}| j                  dt        |      z         Y d }~d }~ww xY w# t        t        f$ r(}| j                  dt        |      z         Y d }~d }~ww xY w)NstrT)typerequired)killedr]   reloaded	restartedstartedr*   )rw   choicesbool)rw   z/service)rw   defaultz/etc/service)r"   r   r   r   r#   r$   )argument_specsupports_check_modeC)LANGLC_ALLLC_MESSAGESLC_CTYPEr   r   r   Fz!Could not change service link: %sr:   r)   az!Could not change downed file: %s )changedr%   )r   dictrun_command_environ_updater   r   ro   r   
check_moder@   rE   r=   IOErrorr>   r   r   getattrr   r   opencloser1   rB   	exit_json)	r	   r   r   r   r%   r   
orig_stater?   d_files	            r   mainr      s   540E+lmf%V$%<%@
 !
F )-#cs]`(aF%MM'"EmmI&G]]8$F
f+CGJw#++5  YJJLKKM Ucii/  $GCs$&f

2  -F[%++-IIf% W#**,7) W% Y  %H9UV<%W XXY" W% [  %HIVWL%Y ZZ[s0   #F6 "2G0 6G-G((G-0H'?H""H'__main__)
__future__r   r   r   rw   __metaclass__DOCUMENTATIONEXAMPLESr1   rM   rh   ansible.module_utils.basicr   +ansible.module_utils.common.text.convertersr   r   objectr   r   rp   rt   r   r   <module>r      sb    A @0dB 
 	  4 A2&x& x|38l zF r   