a )g4@sfddlmZmZmZeZdZdZdZddl m Z ddl m Z ddZ d d Zd d Zed krbedS))absolute_importdivisionprint_functiona --- module: debconf short_description: Configure a .deb package description: - Configure a .deb package using debconf-set-selections. - Or just query existing selections. version_added: "1.6" extends_documentation_fragment: - action_common_attributes attributes: check_mode: support: full diff_mode: support: full platform: support: full platforms: debian notes: - This module requires the command line debconf tools. - A number of questions have to be answered (depending on the package). Use 'debconf-show ' on any Debian or derivative with the package installed to see questions/settings available. - Some distros will always record tasks involving the setting of passwords as changed. This is due to debconf-get-selections masking passwords. - It is highly recommended to add I(no_log=True) to task while handling sensitive information using this module. - The debconf module does not reconfigure packages, it just updates the debconf database. An additional step is needed (typically with I(notify) if debconf makes a change) to reconfigure the package and apply the changes. debconf is extensively used for pre-seeding configuration prior to installation rather than modifying configurations. So, while dpkg-reconfigure does use debconf data, it is not always authoritative and you may need to check how your package is handled. - Also note dpkg-reconfigure is a 3-phase process. It invokes the control scripts from the C(/var/lib/dpkg/info) directory with the C(.prerm reconfigure ), C(.config reconfigure ) and C(.postinst control ) arguments. - The main issue is that the C(.config reconfigure) step for many packages will first reset the debconf database (overriding changes made by this module) by checking the on-disk configuration. If this is the case for your package then dpkg-reconfigure will effectively ignore changes made by debconf. - However as dpkg-reconfigure only executes the C(.config) step if the file exists, it is possible to rename it to C(/var/lib/dpkg/info/.config.ignore) before executing C(dpkg-reconfigure -f noninteractive ) and then restore it. This seems to be compliant with Debian policy for the .config file. requirements: - debconf - debconf-utils options: name: description: - Name of package to configure. type: str required: true aliases: [ pkg ] question: description: - A debconf configuration setting. type: str aliases: [ selection, setting ] vtype: description: - The type of the value supplied. - It is highly recommended to add I(no_log=True) to task while specifying I(vtype=password). - C(seen) was added in Ansible 2.2. type: str choices: [ boolean, error, multiselect, note, password, seen, select, string, text, title ] value: description: - Value to set the configuration to. type: str aliases: [ answer ] unseen: description: - Do not set 'seen' flag when pre-seeding. type: bool default: false author: - Brian Coca (@bcoca) az - name: Set default locale to fr_FR.UTF-8 ansible.builtin.debconf: name: locales question: locales/default_environment_locale value: fr_FR.UTF-8 vtype: select - name: Set to generate locales ansible.builtin.debconf: name: locales question: locales/locales_to_be_generated value: en_US.UTF-8 UTF-8, fr_FR.UTF-8 UTF-8 vtype: multiselect - name: Accept oracle license ansible.builtin.debconf: name: oracle-java7-installer question: shared/accepted-oracle-license-v1-1 value: 'true' vtype: select - name: Specifying package you can register/return the list of questions and current values ansible.builtin.debconf: name: tzdata - name: Pre-configure tripwire site passphrase ansible.builtin.debconf: name: tripwire question: tripwire/site-passphrase value: "{{ site_passphrase }}" vtype: password no_log: True #)to_text) AnsibleModulec Csv|dd|g}|d|\}}}|dkr:|j|di}|D]*}|dd\}} | ||d<qF|S) Nz debconf-showT rmsg:*) get_bin_path run_commandjoin fail_json splitlinessplitstrip) modulepkgcmdrcouterrZ selectionslinekeyvaluer;/usr/lib/python3.9/site-packages/ansible/modules/debconf.pyget_selectionss  r c Csb|dd}|g}|r |d|dkrB|dkr6d}n |dkrBd}d ||||g}|j||d S) Nzdebconf-set-selectionsTz-ubooleanTruetrueFalseZfalser)data)rappendrr) rrquestionvtyperunseenZsetselrr%rrr set_selections  r*c Cstttdddgdtdddgdtdgdd tdd gdtd d d dgdfdd}|jd}|jd}|jd}|jd}|jd}t||}d }d}|dur |dus|dur|jdd||vrd}n:||} |dkrt|}t||} || kr d}|r|jsBt||||||\} }} | rB|j| d||i} ||vrb|||i}nd||<|j r| } | | || d}ni}|j ||| ||d|j |||ddS)NstrTr)typerequiredaliasesZ selectionZsetting)r,r.) r!errorZ multiselectZnotepasswordseenZselectstringtexttitle)r,choicesZanswerboolF)r,default)namer'r(rr))r'r(r)Z argument_specZrequired_togetherZsupports_check_moder8r'r(rr)zAwhen supplying a question you must supply a valid vtype and valuer r!)beforeafter)changedr currentZpreviousdiff)r<r r=) rdictparamsr rrlowerZ check_moder*Z_diffcopyupdateZ exit_json)rrr'r(rr)prevr<r existingreZcurrr;Z diff_dictrrrmains\                rG__main__N)Z __future__rrrr,Z __metaclass__Z DOCUMENTATIONZEXAMPLESZRETURNZansible.module_utils._textrZansible.module_utils.basicrr r*rG__name__rrrrsP#  C