From 48b51260bd4366bb4ccbf5503452160ff4b48aec Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Wed, 27 Nov 2024 17:19:30 +0100 Subject: [PATCH] first commit --- LICENSE | 165 ++++++++++++++++++ README.md | 2 + .../fr/LC_MESSAGES/rougail_output_ansible.po | 57 ++++++ locale/rougail_output_ansible.pot | 57 ++++++ pyproject.toml | 41 +++++ src/rougail/output_ansible/__init__.py | 84 +++++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7116 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 7230 bytes .../__pycache__/cli.cpython-312.pyc | Bin 0 -> 1449 bytes .../__pycache__/config.cpython-312.pyc | Bin 0 -> 4397 bytes .../__pycache__/config.cpython-313.pyc | Bin 0 -> 4402 bytes .../__pycache__/i18n.cpython-313.pyc | Bin 0 -> 1198 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 1124 bytes src/rougail/output_ansible/config.py | 54 ++++++ src/rougail/output_ansible/i18n.py | 24 +++ .../fr/LC_MESSAGES/rougail_output_ansible.mo | Bin 0 -> 1125 bytes 16 files changed, 484 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 locale/fr/LC_MESSAGES/rougail_output_ansible.po create mode 100644 locale/rougail_output_ansible.pot create mode 100644 pyproject.toml create mode 100644 src/rougail/output_ansible/__init__.py create mode 100644 src/rougail/output_ansible/__pycache__/__init__.cpython-312.pyc create mode 100644 src/rougail/output_ansible/__pycache__/__init__.cpython-313.pyc create mode 100644 src/rougail/output_ansible/__pycache__/cli.cpython-312.pyc create mode 100644 src/rougail/output_ansible/__pycache__/config.cpython-312.pyc create mode 100644 src/rougail/output_ansible/__pycache__/config.cpython-313.pyc create mode 100644 src/rougail/output_ansible/__pycache__/i18n.cpython-313.pyc create mode 100644 src/rougail/output_ansible/__pycache__/utils.cpython-312.pyc create mode 100644 src/rougail/output_ansible/config.py create mode 100644 src/rougail/output_ansible/i18n.py create mode 100644 src/rougail/output_ansible/locale/fr/LC_MESSAGES/rougail_output_ansible.mo diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9a33de1 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# rougail-output-ansible + diff --git a/locale/fr/LC_MESSAGES/rougail_output_ansible.po b/locale/fr/LC_MESSAGES/rougail_output_ansible.po new file mode 100644 index 0000000..b53c2f8 --- /dev/null +++ b/locale/fr/LC_MESSAGES/rougail_output_ansible.po @@ -0,0 +1,57 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2024-11-01 11:03+0100\n" +"PO-Revision-Date: 2024-11-01 11:04+0100\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 3.5\n" + +#: src/rougail/output_exporter/__init__.py:73 +msgid "The following variables are mandatory but have no value:" +msgstr "Les variables suiveuses sont obligatoire mais n'ont pas de valeur :" + +#: src/rougail/output_exporter/__init__.py:84 +msgid "The following variables are inaccessible but are empty and mandatory :" +msgstr "Les variables suiveuses sont inaccessibles mais sont vides et obligatoires :" + +#: src/rougail/output_exporter/output/console.py:53 +msgid "Undocumented variable" +msgstr "Variable non documentée" + +#: src/rougail/output_exporter/output/console.py:54 +msgid "Undocumented but modified variable" +msgstr "Variable non documentée mais modifiée" + +#: src/rougail/output_exporter/output/console.py:57 +msgid "Unmodifiable variable" +msgstr "Variable non modifiable" + +#: src/rougail/output_exporter/output/console.py:61 +msgid "Default value" +msgstr "Valeur par défaut" + +#: src/rougail/output_exporter/output/console.py:62 +msgid "Modified value" +msgstr "Valeur modifiée" + +#: src/rougail/output_exporter/output/console.py:63 +msgid "Original default value" +msgstr "Valeur par défaut d'origine" + +#: src/rougail/output_exporter/output/console.py:67 +msgid "Caption" +msgstr "Légende" + +#: src/rougail/output_exporter/output/console.py:92 +msgid "Variables:" +msgstr "Variables :" diff --git a/locale/rougail_output_ansible.pot b/locale/rougail_output_ansible.pot new file mode 100644 index 0000000..6fd3c0a --- /dev/null +++ b/locale/rougail_output_ansible.pot @@ -0,0 +1,57 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2024-11-01 11:03+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" + + +#: src/rougail/output_exporter/__init__.py:73 +msgid "The following variables are mandatory but have no value:" +msgstr "" + +#: src/rougail/output_exporter/__init__.py:84 +msgid "The following variables are inaccessible but are empty and mandatory :" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:53 +msgid "Undocumented variable" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:54 +msgid "Undocumented but modified variable" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:57 +msgid "Unmodifiable variable" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:61 +msgid "Default value" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:62 +msgid "Modified value" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:63 +msgid "Original default value" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:67 +msgid "Caption" +msgstr "" + +#: src/rougail/output_exporter/output/console.py:92 +msgid "Variables:" +msgstr "" + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..139a281 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,41 @@ +[build-system] +build-backend = "flit_core.buildapi" +requires = ["flit_core >=3.8.0,<4"] + +[project] +name = "rougail.output_ansible" +version = "0.1.0" +authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}] +readme = "README.md" +description = "Rougail output ansible" +requires-python = ">=3.8" +license = {file = "LICENSE"} +classifiers = [ + "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", + "Programming Language :: Python", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3", + "Operating System :: OS Independent", + "Natural Language :: English", + "Natural Language :: French", + +] +dependencies = [ + "rougail >= 1.1,<2", + "rougail-output-json >= 0.1", +] + +[project.urls] +Home = "https://forge.cloud.silique.fr/stove/rougail-output-ansible" + +[tool.commitizen] +name = "cz_conventional_commits" +tag_format = "$version" +version_scheme = "pep440" +version_provider = "pep621" +update_changelog_on_bump = true +changelog_merge_prerelease = true diff --git a/src/rougail/output_ansible/__init__.py b/src/rougail/output_ansible/__init__.py new file mode 100644 index 0000000..0117855 --- /dev/null +++ b/src/rougail/output_ansible/__init__.py @@ -0,0 +1,84 @@ +""" +Silique (https://www.silique.fr) +Copyright (C) 2022-2024 + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License +along with this program. If not, see . +""" + +from typing import Optional +from json import dumps + +from ..output_json import RougailOutputJson + + +class RougailOutputAnsible(RougailOutputJson): + def __init__( + self, + config: "Config", + rougailconfig: "RougailConfig" = None, + user_data_errors: Optional[list] = None, + user_data_warnings: Optional[list] = None, + ) -> None: + if rougailconfig is None: + from rougail import RougailConfig + + rougailconfig = RougailConfig + self.rougailconfig = rougailconfig + self.host_namespace = self.rougailconfig["ansible.host_namespace"] + self.config = config + self.read_write = False + self.is_mandatory = True + self.dico = {} + self.errors = [] + self.warnings = [] + + def run(self) -> None: + self.exporter() + print(dumps(self.json_to_ansible(), ensure_ascii=False, indent=2)) + + def json_to_ansible(self): + if self.host_namespace not in self.dico: + self.errors.append(_('cannot find hosts namespace "{0}"').format(self.host_namespace)) + if 'hostnames' not in self.dico[self.host_namespace]: + self.errors.append(_('malformated hosts namespace "{0}", should has "hostnames"').format(self.host_namespace)) + ret = {"_meta": {"hostvars": {}}, "all": {"children": ["ungrouped"]}} +# if self.errors: +# ret["_meta"]["hostvars"]["localhost"] = {'_errors': self.errors} +# ret["ungrouped"] = {"hosts": ["localhost"]} +# else: + hostnames = self.dico[self.host_namespace]['hostnames'] + ret_hosts = {} + for name, hosts in hostnames.items(): + if 'hosts' in hosts: + for idx, host in enumerate(hosts['hosts']): + index = str(idx + 1) + if idx < 9: + index = '0' + index + host_name = hosts['prefix_name'] + index + ret_hosts.setdefault(name, {})[host_name] = host + ret.setdefault(name, {}).setdefault('hosts', []).append(host_name) + else: + ret["all"]["children"].append(name) + ret[name] = hosts + for hosts in ret_hosts.values(): + for host, domain_name in hosts.items(): + ret['_meta']['hostvars'][host] = {'ansible_host': domain_name} + ret['_meta']['hostvars'][host].update(self.dico) + return ret + + +RougailOutput = RougailOutputAnsible + + +__all__ = ("RougailOutputAnsible",) diff --git a/src/rougail/output_ansible/__pycache__/__init__.cpython-312.pyc b/src/rougail/output_ansible/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc5194709034d36fa98a67921fd0ca7ffa43dfa3 GIT binary patch literal 7116 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 E2N=C3@&Et; literal 0 HcmV?d00001 diff --git a/src/rougail/output_ansible/__pycache__/__init__.cpython-313.pyc b/src/rougail/output_ansible/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d95de34af7993d3d032894cd5058afc666b8eec GIT binary patch literal 7230 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 YFA#a|-*BVW;rk)jpWw;A_EDz)1L=|Ef&c&j literal 0 HcmV?d00001 diff --git a/src/rougail/output_ansible/__pycache__/cli.cpython-312.pyc b/src/rougail/output_ansible/__pycache__/cli.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e45bfb194adb2d330c0d290615cf5bca52699677 GIT binary patch literal 1449 zcmah}&2Jk;6rc51+>O#=LJky!o*+oJ4`V%O;UtJNAm1@&+~ro{pP)Sziw>k z1lRXJ|1xOC3Hd`QXDbp4ryrp3gjl3YEX|5I+9=YEXvB(sO}bGl){V{LnS_y!5~7zJ z1}3*C47h+M_lE{^cDOIczTBbr$6QD%biKtK_LWZ|ZA&@!ZshaR=``o9jJbix=p{a$ z2{yDPq)QptE9_ml*E5GaTB4jfXK z3d4bh-^Z{}TZIM#<0^}1V~+iqu6!#hdMk_$6^^KeWZXRfiX1ji%gaz=ia>`(qvygA-m-{c_3tkp5H%Qv%W29jt8WNi_$ALZt-=hQH$?APy!o6zy z_EDz|#riSaD>j?Odi(ewxMwUL&r^c?;(~%jCAN`=RFAQE zp3Qy70^68SETT!-1QRl_>&7abH`GWs9PSQR4J2P{lmlP`aJkIFR4{A^$pfH&RZqXD zUKXmZnajc_pF^ACols~vhDo!~@|E}gejy9DxF@-rg}X(7!rt!g?#}Lh;ZuN4tEm5} z;fu;>%dPN<90f0=96k^eU()$XprrIu3%4g^9ue#Fh^4)Y+Jh)ckwA*Mu_5aCi%EqY zthqKP^XNSGQ}kJEWqA;v$G?0XJv{j={Ay%IGO_wHL51MLTPCs4E^~)oCbE1B`$hDy zdyQWB@7ouai*rK3FQdYDGl}JfSd9Ray8|{{Cc^Kfb4P(QhX}cHyxJ4A#zFKtL-ZOyfSVN$%`aOrWUEI zPd|H}+J2l^Y`*`r`+PI~UGn$Trc$>aCx6@c@Q3S*j|z)xHx}1#zFdo4{`g_#L?`j} zZ|^+1^G)p(fv|u9ay=7YuJw8rH+#J$3HS$gWi%Y8*ZYx(D|lR7#_d(|3mh@NLvM|fzY;Xj307ji7RpEYthD{8s(!50s*0D@l8&f^)UW*u4HYV1J$J^F@Cax- zmhV0Hbzb+p?q8dlVhFzeBY)2Qt`VVs@j>uObztQT05_0^CXps+q9GK-Nm1Z%$Osjr zNeN&{k+mi*d`X%NiztP($R(sj?~6W$$%xjV#cm6lOrkkai(d*)HfW8Lv67T%R(6FD zik+~`oIZ_nxBva0u?oGgh>FlgYWcxgOh}?8(st zpeUB8KAmT{>qG({+<)+Av6!aYjOtSk(eRwk@;EhmYTrQ&_zeY+VnbJnX_HtilhghUlJZJ${h3S@g1QQSf z2+R^{!x)1oK7l&6ZV)Zjr7+Gg#a59YN&uIoy1eysJ#PxUCYOeF(_=bs6+w(VU<1MC zbi=??1Uoj#IYxJE%3*k7D0A}kcn0^4oW&D;V`F_InX^YcJzKC!W{HnSFBA=(Uw}fX zVzLtO92*`OJ8=^B_Z=TPHIzBaZ)9*NGcu4)mY zJs77!Eg*mF9qQz^Q?Mw(8ew2RHi&u_F3-+ej-lbaGE3kRRie)VLkd>GWC9hw9cfH4 zEOXj7Aoh}>9Km`Hn-=TFb5sX|V3w!1S8gx1c6;4;$W(i}@dv-a83H;Xc+^l-(v8y& zKYi%X{%(BSvYBOe{6_$s-(XbRP3%2JN z#2#_OlrV>ys_$`r%Uv713$09oBZ319RivY;z=U8Et2-z{_v>>rfztJH(`LDm#ts31))!=Mu4 zEo)hw7lZvl=&4Ftn6<60ui~2(sBq=uiZrt!SX=97Hm$({RFx}oMVLkO1J)7DX_1P2 z3&Px6u&kpA*xgVOD)Re)Vm(dWLZ62N34SZAj~CAWV6Kk>ohyHr5aR^BuObBa`_ZSe zD(XlT&$Ywdfpl-@D_FZOUg?nFL{&~hD|pZxO2kIWoz#!mJ>dIAhh>AnT_3w)f4&^* zDVEA|HVfSgp~sC5TC~7pak)oxAWo%8HtU9q5VuX{M!>VErc+lkl>%|2#MEq_2q?F5Hw4MS4Z$*P;6vFX>oyEr zREZZl-LTD*kCq6#ao^9f9-4^HgzZX2a7D_k(hd6?C^t1b3=Q_a7yZe+RUpY}(=nZk z$!VP>!NX@svMyZGrs^vEn(C6OmlQ!$ZhV@sY@I6Qce$OD*#|y5kCrwZod4BQbL)KS zaa;Rm`RkpJ+V<4i_S}81)^^}gYj3T!_q*1k3(``{#!pL^OFmG&T)jE|ZOf1EurI4$ zR3A)yyZ6{q3^kwzq=hvJ3L8lii45h7%!`~- zC=qcZryVxxFuUBHfz)P0@&Q|hoNHsH=qEi$(h9bwW{3)D)U=sms)WiwWkg*K!Z6|t zc!7G4#{h%Y|K{V2&wF1GY!y_3-#uX@Ap!^EnbGk~+B1rKkQ{7cTP#6k#+w;T_s!=M*-**u%fqsJ|q7n+q$UV|CPx{y^NyNa4r2|;d=KM$25 z8db$BO%k`-2&_c4hTBq_$7tmYa2g8&b8ieokz}h>_hMZy_DgVwdKUaf@a4O8TbVM5 z#!q6*N=4F(XLNH$@x~t1i!0s$<6rOQ)sf9ev7Q0&j$?RlKzuLWU9E2nu&$khAPq;o z4U|BM<5gEa(N`Gm*X^RAl<=%Vb4Ey;c>n>B zVE>Na!E(RFt7dp1{cuFC7?j%(Je&fQ2;5Tq-5$s5 z5VBs?QUAbT-}tGFH>u_=c*eoKx{>-c<&nG`<)(n~KKw$6LD5lv!%`mdzUL_>A^Al^ z1fHC5-gYDYTg~>$hlJ$H42mJ*$1fh$+z2IL>neeh-7uy+Y*QY7&-6`o!0k`$?5%kqz$$P-7F#X=_ipH{Z)DAtcV;eHMSuKa;I?G*p zW+|CU4Jenw&ZRb-AO_llb0`|0>SKfE;6o4XsbU0F%0dMS^yHgdIWT(bn_aHtA2~@^ z;_UpqdGpPiH{W}^*3=Y3@T~m4yD-p*(7$;jc%*t|?Fv*rM+%}y5ft&9a8{%u=Jn9I z&{>H}P?xUBN|O@qL{}vm-huWYCDMtM=uy$vK_g0o5=#n-d?k8BRN`Fjsz@7@Mj9(f ziDs<^g0a)Kl{X4FZPu~?>PFkGf~fodfT)jTBxGdu6hYLxWjs$IdlW?@Ql z26Lz}U2zCD9IRQn6o4q%IU`?%j#$OY5sIB6!GNX2u$}iBqZ3(to-hVuqr@UqGx20) z+B9^0-q4A~2-aYE-ouI{ho`H2R&0cWQ0gG?hz-g$$FQwFObi&Oc!p30ZG1Rbr>?CJ z1E^lj;kaqcF7rtV09(bT2DpNG$yfKivArBNEDw9pF2in$pba)WYnUdUCb+^#zGC)a zFa*9hmN|1Fn~4ohT*em%)9Jy9%;n=C=@e}kB{Rg=W0cCK0hkM_>CD*a?D@eop3J5vFDS!Fj1@2oH}Q{Km3v6Z zrX-dl4tNQJ9bbl{WPr@f;i5J};7E01%m6M8>);rHC4W?ROfzk(;B6DYY_oF}*!)}63mRgyL>q~P57nX}Z%Wb83_{)FI4lbTb6ccW=*ITakLViGpthAD9> z)YAPc;+On3hTyk$9WDgiIl)2)kR?nBfzVX_Mj>>x-j@#UX&?e`Mcf}pC>?pOt6n`? zf48GEE<%==71PmIrL0gklm-niKT0TAwYNT`ZA0iaveGNEfPH)bp{b@oZx$)?erRMv zyqs!T?-zr)0fShQ5}s;XA79sf9IT*my#{EJ(pv(FjdyzMMm?xm@}>8WLqj_Pt8Nc^ zl}J`@2G)9wo=xlo(hZk7WKgh~6`RrFaIg;|Y_9dv)}M-bAFMLIf>0b`G_^CpoE3r< z+R+Cx6AvIJo`D_P?`P%L;qnoy;y9cg*TzIk?uOE@c zZdIh$mVtm)imR-wR-hI^ZDDsH?_1ND}{q5A! zIkk39T{!#U!iQubU#jJurF^xPuP%_eh1QSPLSlRKDiWKTSHtLM2mZMG!S0)p4YiBW zo+mp|+rZOKbaF^|H2RIY7$5&yeK>r3_}0WyO%591-{3HO`Npqp9@)9oTe=k9beO!q-p%{vHSu2@!x~Gn3hj;`ze^h#HKTdB&Av zx&umn9SqBG;5xL{F(-qbLom)dpqNKbqo}d{)~S_kZ{0238eI*c#$9VLfL?&fwR$j{ zq4GS;ZbZAFD(f}bhl8~Qc+PCB+K$#VC<8k(NU@Lp{e87NaO3fl_Y8O+Dqz5MA9(eQ(_HqYCpiCryDdQx zHjCDZn1w8xD_D<%&;zj>a&?H&q9SEO5QF5yq5Z&GmN*XQ$r)V>&L(H z8W?}P7aMuZ98#`F3;fmq-WM#s5AVHE7Ywv+%mYG)sh$8OkSxtoV0?ek7XS|#tZZsk zJfl&A1A~h?14$sS^4xY~F3;bIr{5w4*xn3L|8GUMWmY%zXePuU%U8wyw;#io3Aaj) z~RWgn5U@rG}9~8fCLm0;nELazpyU2 zi59;2hJsB%v&})5AOdTSO{<$A&JgC{K)?W_2j+**2H;GB{WJan$U`<0$*cD=spwvHIDd)(?oTd_zpI}7bixlQFH{yT8F)!6fNUrQa z;zWE7^EfX;3HZ8BVCF$kKsnFTpYwt%WfBy8ML$Sv;h9A}83F#{AJp_XNI=?+SP2R* zLbPoCZ1nEf7vp!v?_OAJ?w%iA72j-;p7kTS@srWzXxr^~?j5|-53yVhuO5fawRZ*7 z-U%5)wB`1td-;2p?xz>pdu!3&Pa{u4Faoi@ZP#);{C6(5wLfW)8^fzemct&gCPaTT z90pB5k%-eIyxa&+w@hQ&&-R*vjI-jv*PNHp`9X;1N4^G5=iY93fY40y73O!NC;Yta zBs~SPoR!%y6ssXY5T1xz1nK);B<%br>H);@mifrjaH}vOJnM-I+n*pPRxx@5|3~f< W!XOZieIMbqUkWJR_esRt%>Mv~adRU8 literal 0 HcmV?d00001 diff --git a/src/rougail/output_ansible/__pycache__/i18n.cpython-313.pyc b/src/rougail/output_ansible/__pycache__/i18n.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33b7581c375d58de525bea576e26a6808f24d243 GIT binary patch literal 1198 zcmai!&u`pB6vypdC)v6x6mfv#Q`JLOgf+AvL8*$iY0|h2o0Yv$6%onI+RyfgS&x|+ z?`AmwJ@FUtM?_q>aOWRDYQzD_5)wa7+&~d`o;SOV1czGw@n+`D^XGlvv(K+xb1gc4 z|Ndt7W!tj;Xa=jJvoy{>C*vC{w3HRvVe7H|sHIxa*zL#dM~-s9I&R&tLg#qxhIQ=F zwf?Ssu{U^W73}gEuDyBHvQ{49dbsg^TXl{*LF>|IWvMG!r+bC{NK1ZUP!-H@Sunx% z!hp(f!3{_4hGcwJA#CQxl=_b6&1SQnzL@N#s_Smca;|um8`#|L!mYP%z2my0oNFkR z%oLjdnW;hqEmJdN3h%&NRuHoS6ee67#mALF;09Qccv8VcCOn-|6P%k&c9#ezMTC1sOSG)j2J zg@7?ar7^9<7LX9|#2@V)9FE-n;0T`dgP=bc9eqHaCYQ8|Q@n`7C#B$&94V?;Vdf3< zM?1mx9{Kn0`}_XrsKMU#M}wU(baxK|=)i*P86Qz8HIaz~ayCUOX^ebITnu7rjFplvjO{WZi)@i5!CZC^@%bqf(rkey z&bv()E}Jkbs-9GtM|E#%uDyFb_s^!myLNrmkSLnU)0E1togp)M{hE?hM%)nzSym>( zlTs=wV7)G6%mj|evy(C*#w`AH&~@vLC`x1;MfFC8#^8xj^eJ2QMoG~GA1kLBwW)*a zP86kFAi1uW)Z&GyZ91b<>%0M~?|ZqNphv_-b>d~*c-qJ*dP^WrtN6M7A2^S{{a(>4 z=XK{UeHWF$d+JpR+589ehjja^ZQJ(Wt?Rb)&rQpQU#!=Eb6$RSy?c85)O@%1?H50L l56-*?Kb)L-2S2?reD-m4=6v#%{j0O~wg1$AYO7Z$#=ngWcrgF~ literal 0 HcmV?d00001 diff --git a/src/rougail/output_ansible/__pycache__/utils.cpython-312.pyc b/src/rougail/output_ansible/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..907dbdf26ca5f5984954f64857b22b10e9ca5c4d GIT binary patch literal 1124 zcmaJ>&2G~`5Vo5_E2Dx0NL=UGNN(I8egr{CZq%QkHjUy$sJ%oRdmOLic+KuQX(SFs z;vM=7TzC;)0QH2#3jn?K#B7rOA;C%+&8~Om`@Wgkd|g^{ELynxC5}s$^}}o~mpyaN zAChxwMb?oO*`KT<8||aH@m#sYo>Pbu@RYwV5SA0IbM?yeMx#+hO%E%vEIT!kk0tLX z8kTEiSYKU#>cEZVL|kdfdj&=?;yQty=HALW2ni|ENS23~DZCxiPPl?xioRq6AUBqX zphT=kOkx$rqJWTPAn`J}M&KG)7I~C-AR-=*9Xcqoh#+)=Ku`k(BA#q^8Xefd3?)mU zS@ehk>`iF^BV2Q$65`t%J0^D9pa(N_*cOzPX)dxVAPFLXAxcGiAX!s@SvHqsI?GHO z!V*Mog382lJkvglt6Yh9{uX|%F9M!T$R{EvISFMYfg_%#&_gH`#zpEny+XsgdVBYv z(+0nB2=Dw>%Wt#~tCQLb`ieuG=HY`p<)$f2N|xy{ad-B&TD4ue?{C)k>g_|*rR{pV zu@wZceb53QntrQYuXXnP7BoAp=0UJk0SKr(R0rojWsN6okq8lL##41I`NpV#b4ZO< zi73(t5;jC?aEN?JBpHM>W|!stH;}_pk@cs8rf&>U6?hDp&@PN5r(w}zQp;PNb*?+> zLOlyBE` zpZb^=x{JrTkTlp{p-oBi@!33viI4{83H{UpnG@^Vz56F`&&jnK<. +""" + +from pathlib import Path + + +def get_rougail_config( + *, + backward_compatibility=True, +) -> dict: + options = """ +ansible: + description: Configuration of output Ansible + disabled: + type: jinja + jinja: | + {% if step.output != 'ansible' %} + disabled + {% endif %} + + host_namespace: + description: Namespace with host values + default: "hosts" + disabled: + type: jinja + jinja: | + {% if step.output != 'ansible' %} + disabled + {% endif %} +""" + return { + "name": "ansible", + "process": "output", + "options": options, + "level": 60, + } + + +__all__ = ("get_rougail_config",) diff --git a/src/rougail/output_ansible/i18n.py b/src/rougail/output_ansible/i18n.py new file mode 100644 index 0000000..78393c0 --- /dev/null +++ b/src/rougail/output_ansible/i18n.py @@ -0,0 +1,24 @@ +"""Internationalisation utilities +Silique (https://www.silique.fr) +Copyright (C) 2024 + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License +along with this program. If not, see . +""" + +from gettext import translation +from pathlib import Path + +t = translation("rougail_output_ansible", str(Path(__file__).parent / "locale"), fallback=True) + +_ = t.gettext diff --git a/src/rougail/output_ansible/locale/fr/LC_MESSAGES/rougail_output_ansible.mo b/src/rougail/output_ansible/locale/fr/LC_MESSAGES/rougail_output_ansible.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb7e0aee9ace6a4aa766b4be2f3c9c8ad457fd78 GIT binary patch literal 1125 zcmaKq-)a*<6vjubRaca@;6LcaAV>t+G-<1b6)$T4NFkx6q(v_$yC<8G&CD`08_j#@ zL-ZZI%dNhG&)^FPev{2MjYtP(f0>hS&-u>m`L(w6jbYuzUdMLWtJpuV{aU%k*e!4s zyazr3?}Ih)A@~YB06Sm{{0cq=e}WId-!m>>XDq;Z9sC26M1_o{WX`mrl= zC$(aG)E7nO_()_0v5rn;Us5tV9vPWRB{H5YsJa8wJ!Z7!g;xbQQ5vmFTz_l5%kB{~yk6mtGbn zl|w{JrMG+Go1Ik+MC{n;PZYcGFbU7dSX@xVgX5#{ghtYz!adwK*~nQ&jlxB-<$yw#H~cu$H9j3(i`am4d+O3o*% z=VRWizYIQvGlBPbtSOO>Zz0awlk=2RLb#EP3d3_@crrQ1fVe7D-rwZ>e;S_D^mJf| zwJ{CVty^vjIikWMX3^ooh*(U7oW(~nfrK2_y-cRKLTPZ0u1_vzZZW}piZ0^b=wB}EK1u)p literal 0 HcmV?d00001