
    VhT&                         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
mZ d dlmZ  G d de      Zd	 Zd
 Zedk(  r e        yy)    )absolute_importdivisionprint_functiona  
module: simpleinit_msb
short_description: Manage services on Source Mage GNU/Linux
version_added: 7.5.0
description:
  - Controls services on remote hosts using C(simpleinit-msb).
notes:
  - This module needs ansible-core 2.15.5 or newer. Older versions have a broken and insufficient daemonize functionality.
author: "Vlad Glagolev (@vaygr)"
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  name:
    type: str
    description:
      - Name of the service.
    required: true
    aliases: ['service']
  state:
    type: str
    required: false
    choices: [running, started, stopped, restarted, reloaded]
    description:
      - V(started)/V(stopped) are idempotent actions that do not run commands unless necessary. V(restarted) always bounces
        the service. V(reloaded) always reloads.
      - At least one of O(state) and O(enabled) are required.
      - Note that V(reloaded) starts the service if it is not already started, even if your chosen init system would not normally.
  enabled:
    type: bool
    required: false
    description:
      - Whether the service should start on boot.
      - At least one of O(state) and O(enabled) are required.
a  
- name: Example action to start service httpd, if not running
  community.general.simpleinit_msb:
    name: httpd
    state: started

- name: Example action to stop service httpd, if running
  community.general.simpleinit_msb:
    name: httpd
    state: stopped

- name: Example action to restart service httpd, in all cases
  community.general.simpleinit_msb:
    name: httpd
    state: restarted

- name: Example action to reload service httpd, in all cases
  community.general.simpleinit_msb:
    name: httpd
    state: reloaded

- name: Example action to enable service httpd, and not touch the running state
  community.general.simpleinit_msb:
    name: httpd
    enabled: true
N)AnsibleModule)	daemonizec                   N    e Zd ZdZd ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)SimpleinitMSBz8
    Main simpleinit-msb service manipulation class
    c                     || _         |j                  d   | _        |j                  d   | _        |j                  d   | _        d| _        d | _        d | _        d | _        d| _	        y )NnamestateenabledF)
moduleparamsr   r   enablechangedrunningactiontelinit_cmd
svc_change)selfr   s     t/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/simpleinit_msb.py__init__zSimpleinitMSB.__init__]   s]    MM&)	]]7+
mmI.    c                 h    |s| j                   j                  |      S t        | j                   |      S )N)r   run_commandr   )r   cmddaemons      r   execute_commandzSimpleinitMSB.execute_commandh   s+    ;;**3//T[[#..r   c                    | j                   r(| j                  | j                  j                  d       | j                  s| j                   dv rd| _        n8| j                  r| j                   dv rd| _        n| j                   dk(  rd| _        | j                  j
                  r+| j                  r| j                  j                  dd       y y y )	Nz@failed determining service state, possible typo of service name?msg)startedr   reloadedT)stoppedr#   	restartedzservice state changedr   r!   )r   r   r   	fail_jsonr   
check_mode	exit_json)r   s    r   check_service_changedz#SimpleinitMSB.check_service_changedn   s    ::$,,.KK!!&h!i||

.P P"DO\\djj,CC"DOZZ;&"DO;;!!dooKK!!$4K!L '6!r   c                    | j                   r| j                  dv rd| _        ng| j                  s| j                  dk(  rd| _        nD| j                  dk(  rd| _        n-| j                  dk(  rd| _        n| j                  dk(  rd| _        | j                  j
                  r| j                  j                  d	d
       | j                         S d}d}d}|||fS )N)r"   r   startr#   r$   stopreloadr%   restartTzchanging service stater&   r    )r   r   r   r   r   r(   r)   service_control)r   rcerrouts       r   modify_service_statez"SimpleinitMSB.modify_service_state{   s    ??zz33%\\djjJ&>%y($z)&{*'{{%%%%d8P%Q'')) BCCsC<r   c                 <   g d}dg}t               }|D ]"  }| j                  j                  ||      ||<   $ |j                  dd      r)t        j
                  j                  d      r
|d   | _        | j                  | j                  j                  d       y y )N)z/sbinz	/usr/sbinz/binz/usr/bintelinit)opt_dirsFz/etc/init.d/smgl_initz:cannot find telinit script for simpleinit-msb, aborting...r    )	dictr   get_bin_pathgetospathexistsr   r'   )r   pathsbinarieslocationbinarys        r   get_service_toolszSimpleinitMSB.get_service_tools   s    :;6 	PF#{{777OHV	P <<	5)bggnn=T.U'	2D#KK!!&b!c $r   c                 D   d| _         | j                         \  }}}| j                  n|j                  d      dk  rZ|j	                         j                  | j                  j	                         d      }d|v rd| _        | j                  S d|v rd| _        | j                  S )	Nstatus
   r0   zis not runningFz
is runningT)r   r1   r   countlowerreplacer   )r   r2   status_stdoutstatus_stderrcleanouts        r   get_service_statusz SimpleinitMSB.get_service_status   s    +/+?+?+A(M=<<M$7$7$=$B$**,44TYY__5FKH8+$ || )#||r   c                    | j                   | j                         z  sy d| j                   rdndz   }| j                  | j                  d|d| j                        \  }}}d| _        |j                         D ]U  }| j                   r|j                  d      dk7  r	d| _         n,| j                   r9|j                  d	      dk7  sNd| _         n | j
                  sy |||fS )
Nbootr   disable Tzalready enabledFzalready disabled)r   service_enabledr   r   r   r   
splitlinesfind)r   r   r2   r4   r3   lines         r   service_enablezSimpleinitMSB.service_enable   s    {{T1133t{{8	B--D<L<LfVZV_V_.`aS#NN$ 	D{{tyy):;rA$;;499-?#@B#F$	 ||C~r   c                 `   | j                          | j                  | j                  d| j                  d      \  }}}| j                  rdnd}t	        j
                  d| j                  z        }|j                         D ])  }|j                  |      s| j                  rd} |S d} |S  |S )NrR   dFTz^%s$)	service_existsr   r   r   recompiler   rU   match)r   r2   r4   r3   rT   rexrW   s          r   rT   zSimpleinitMSB.service_enabled   s    --$:J:JDKK.XYS##';;%Djj499,-NN$ 	Dyy*.++$ <A	
 r   c                 <   | j                  d| j                  z        \  }}}d}t        j                  d| j                  z        }|j                         D ]  }|j                  |      sd} n |s*| j                  j                  d| j                  z         y y )Nz%s listFz
^\w+\s+%s$Tz0telinit could not find the requested service: %sr    )	r   r   r\   r]   r   rU   r^   r   r'   )r   r2   r4   r3   r[   r_   rW   s          r   r[   zSimpleinitMSB.service_exists   s    --i$:J:J.JKS#jj23NN$ 	Dyy!%	
 KK!!&X[_[d[d&d!e r   c                     | j                          | j                  d| j                  }| j                  |d| j                  d      \  }}}|||fS )Nz run rR   T)r   )r[   r   r   r   r   )r   svc_cmdrc_statestdoutstderrs        r   r1   zSimpleinitMSB.service_control   sU    !%!1!1499=#'#7#77DKK8Xae#7#f &&&&))r   N)F)__name__
__module____qualname____doc__r   r   r*   r5   rC   rN   rX   rT   r[   r1    r   r   r	   r	   X   s<    	 /M 4d0 f*r   r	   c            	          t        t        t        ddg      t        g d      t        d            dd	d
gg      S )NTservice)requiredaliases)r   r"   r$   r%   r#   )choicesbool)type)r   r   r   r   r   )argument_specsupports_check_moderequired_one_of)r   r9   rj   r   r   build_moduleru      sD    ti[9YZf%

 !!9-. r   c                     t               } t        |       }d}d}d}i }|j                  |d<   |j                          |j                  j
                  d   |j                          |j                  |d<   | j
                  d   !|j                  |d<    | j                  di | |j                  |d<   |j                          |j                          |j                         \  }}}|dk7  r'|r| j                  |       n| j                  |       |j                  |j                  z  |d<   |j                  j
                  d   |j                  j
                  d   |d<   |j                  j
                  d   s(|j                         }|d|d<   n6|d	u rd
|d<   n,d|d<   n&|j                  j
                  d   dv rd
|d<   nd|d<    | j                  di | y )Nr   r0   r   r   r   r   r    absentFr"   r$   )r"   r%   r   r#   rj   )ru   r	   r   rC   r   r   rX   r   r   r)   r   rN   r*   r5   r'   r   )r   rl   r2   r4   r3   resultrE   s          r   mainry      s   ^FF#G	
B
C
CF\\F6N  ~~Y'3 #NNy}}W%#OOy"6"mmF7O  !!# 113NRc	Qw%%'*<*<<F9~~Y'3#NN11)<y>>  )++->&F7Ou_'F7O'F7O >>  )-\\'F7O'F7OFvr   __main__)
__future__r   r   r   rq   __metaclass__DOCUMENTATIONEXAMPLESr<   r\   ansible.module_utils.basicr   ansible.module_utils.servicer   objectr	   ru   ry   rf   rj   r   r   <module>r      s^    A @&P6 
 	 4 2W*F W*t	<~ zF r   